MySQL:13.基于GTID的主主复制

环境

第一步:安装 MySQL Server(by all)

第二步:修改配置文件

根据实际情况分别修改每台服务器以下值:server-id、auto_increment_increment、auto_increment_offset

cp /etc/my.cnf /etc/my.cnf.bak
cat <<\EOF >/etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 设置服务器编码
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
# 跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip-character-set-client-handshake

# 最大数据包
max_allowed_packet=200M

# 不区分大小写
lower_case_table_names= 1

# 最大连接数
max_connections = 20000
# 最大错误连接数
max_connect_errors = 3000
# https://www.cnblogs.com/mydriverc/p/8296814.html
# show variables like 'back_log';

# 禁止DNS查询
skip-name-resolve

# 解决errro_logs时间戳与linux系统时间不一致问题
log_timestamps = SYSTEM

# mysql总共能够打开的文件的数量
# show variables like 'open%';
#open_files_limit= 59000

# STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做任何限制
# NO_AUTO_CREATE_USER:防止GRANT自动创建新用户,除非还指定了密码。
# NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

# 确保默认存储引擎是InnoDB
# Galera Cluster不能与MyISAM或类似的非事务存储引擎一起使用
default_storage_engine=InnoDB

# InnoDB缓冲池 建议为物理内存的3/4或4/5
innodb_buffer_pool_size = 5G

open_files_limit= 30000
innodb_open_files=60000
innodb_lock_wait_timeout=500
back_log = 500
key_buffer_size = 124M
read_buffer_size = 16M
read_rnd_buffer_size = 2M

# 打开慢日志查询
slow_query_log = 1
# 设置慢查询阈值
long_query_time = 2

## 从这里往上为 MySQL 优化相关
## 从这里往下为开启 GTID 的必须项和推荐项目
## 指定 Server-ID(要求所有服务器唯一)
server-id=141
# 步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_increment=2
#起始值。一般填第n台主MySQL。
auto_increment_offset=1
### 开启二进制日志
log-bin=mysql-bin
### 基于行
binlog_format=row
## 如果 binlog_format=ROW 会将执行的SQL语句记录到日志
binlog_rows_query_log_events=1
### 保留2天自动删除
expire_logs_days=2
### 开启 GTID
gtid-mode=ON
### 启用后,服务器通过仅允许执行可使用GTID安全记录的语句来强制执行GTID一致性
### 仅在语句进行二进制日志记录时才生效
### 如果禁用了二进制日志记录,或者过滤器删除了语句而未将语句写入二进制日志,则不会对未记录的语句检查或强制执行GTID一致性
enforce-gtid-consistency=ON
### 将从主库同步数据写入 binlog
log-slave-updates
### 启用并行复制
slave_parallel_type=logical_clock
## 安全的过滤掉某些不需要同步的表或者库
## 避免在主服务器使用 binlog-do-db 和 binlog-ignore-db
## 原因详见:https://www.percona.com/blog/2009/05/14/why-mysqls-binlog-do-db-option-is-dangerous/
## replicate-wild-ignore-table=mysqlslap.%
EOF

第三步:设置主从同步

1.备份

在做备份恢复的时候,有时需要恢复出来的 MySQL 实例可以作为从库连上原来的主库继续复制,这就要求从备份恢复出来的 MySQL 实例拥有和主数据库数据一致的 gtid_executed 值。这也是通过设置 gtid_purged 实现的,下面看下 mysqldump 做备份的例子。

这里使用 --all-databases选项是因为基于 GTID 的复制会记录全部的事务, 所以要构建一个完整的dump。

mysqldump \
--all-databases \
--single-transaction  \
--triggers \
--routines \
--events \
--host=127.0.0.1 \
--port=3306 \
--user=root \
-p000000 > dump.sql

        ## 生成的 dump.sql 文件里包含了设置 gtid_purged 的语句
        SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
        SET @@SESSION.SQL_LOG_BIN= 0;
        ...
        SET @@GLOBAL.GTID_PURGED='f75ae43f-3f5e-11e7-9b98-001c4297532a:1-14:20';
        ...
        SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

        ## 如果不希望备份文件中生成设置 ``GTID_PURGED`` 的 SQL,可以给 mysqldump传入 ``--set-gtid-purged=OFF`` 关闭。

2.从库恢复

## 恢复迁需要先清空``gtid_executed`` 变量
reset master

## 执行恢复
mysql -uroot -p123456 < /home/dump.sql

## 查看恢复出实例的 GTID_EXECUTED 是否和主库一致
show master status;

3.两台服务器分别执行以下语句

IP 地址需要修改为对方服务器的 IP

## 由于恢复出 MySQL 实例已经被设置了正确的 GTID_EXECUTED
## 下面以 master_auto_postion = 1 的方式 CHANGE MASTER 到原来的主节点即可开始复制。
CHANGE MASTER TO MASTER_HOST='192.168.2.210', \
                MASTER_PORT =3360, \
                MASTER_USER='repl', \
                MASTER_PASSWORD='000000', \
                MASTER_AUTO_POSITION = 1;

4.两台服务器分别启动 Slave 复制线程

start slave;
show slave status\G

5.测试数据

在两台服务器上分别写入数据,到另外服务器查看数据是否已同步

6.测试性能

## 读性能
mysqlslap -uroot -pXiaoliu123!  \
    --auto-generate-sql \
    --auto-generate-sql-load-type=read \
    --number-char-cols=10 \
    --number-int-cols=5 \
    --number-of-queries=10000 \
    --concurrency=300 \
    --iterations=5

## 写性能
mysqlslap -uroot -pXiaoliu123!  \
    --auto-generate-sql \
    --auto-generate-sql-load-type=write \
    --number-char-cols=10 \
    --number-int-cols=5 \
    --number-of-queries=10000 \
    --concurrency=300 \
    --iterations=5
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,711评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,079评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,194评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,089评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,197评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,306评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,338评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,119评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,541评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,846评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,014评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,694评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,322评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,026评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,257评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,863评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,895评论 2 351

推荐阅读更多精彩内容