MySQL复制
MySQL传统的主从复制
master节点的配置
- server_id=1
- sync_binlog=1
- log_bin=master-bin
- mysql> create user 'repl'@'192.168.1.%' identified by 'password';
- mysql> grant replication slave on . to 'repl'@'192.168.1.%';
slave节点的配置
- server_id=2
- relay_log=slave-bin
- skip-slave-start=on # 默认MySQL启动就会自动start slave, 设置为on则需要手动start slave(推荐)
- read_only=on # slave节点应该是只读的, 对super用户和relay log的repaly无效
- mysql> change master to ...
- mysql> start slave # 并不是连接到master节点, 而是设置连接到master节点的参数, 生成配置文件master.info在datadir项指定的目录中
- mysql> stop slave
查看slave节点的状态
- show slave status\G;
查看master节点的状态
- show master status\G:
将master节点的数据备份恢复到slave节点上
- mysqldump -uroot -proot -q -c --lock-all-tables --master-data=2 --no-autocommit --flush-logs --databases mydb > backup.sql
- scp backup.sql root@node2:~
- mysql -uroot -proot < backup.sql
MySQL传统的主从复制之辅助master
主要对充当master节点的slave节点进行配置
- log_slave_updates=on # 默认情况下在replay中继日志时不会记录到binlog中, 开启该选项才可以
- log_bin=on # 要记录二进制日志这个是必须的, log_slave_updates和log_bin是要同时设置的
- 一个slave2是以slave为master的slave节点, 因为都是slave节点, 所以可以将他们都停下来进行快速的冷备份
- 将slave中的数据文件拷贝到slave2中
- 在slave2节点中, 删除拷贝过来的文件中的master.info, relay_log,info, 所有的二进制日志
- 为slave节点添加具有复制权限的日志
- create user 'repl'@'192.168.1.%' identified by 'password';
- grant replication slave on . to 'repl'@'192.168.1.%';
- 在slave2节点中配置连接slave的参数
- mysql> change master to...
- read_only=on
- skip_slave_start=on
在master节点查看已经使用start slave连接的slave节点
- show slave hosts;
slave转为master
- 该slave必须是一个开启了log_slave_updates和log_bin的辅助master节点
- mysql> stop slave;
- systemctl stop mariadb
- 删除master.info, relay_log.info 和 中继日志
- systemctl start mariadb
- 剩余的slave节点的master都指向该转为master的slave节点即可
MySQL主从复制(基于GTID)
master节点
- 配置文件中相对于传统复制添加 gtid_mode=on 和 enforce_gtid_consistency=on
- 创建具有复制权限的用户
- show master status; 获取当前的gtid
slave节点
- 配置文件中相对于传统复制添加 gtid_mode=on 和 enfoce_gtid_consistency=on
- reset master
- show global variables like '%gtid%'; 找到 gtid_executed 和 gtid_purged, 这两个变量是与gtid有关的
- set @@gobal.gtid_purged=从master节点得到的gtid号, 这样再第一次同步时就可以跳过重复和一些不必要的操作减少错误和提高效率
MySQL半复制
与传统复制唯一的不同就是需要在配置文件中添加关于加载插件的信息
在master节点
- plugin-load='rpl_semi_sync_master=semisync_master.so'
- rpl_semi_sync_master_enabled=1
在slave节点
- plugin-load='rpl_semi_sync_slave=semisync_slave.so'
- rpl_semi_sync_slave_enabled=1
辅助master节点
- plugin-load='rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so'
- rpl_semi_sync_slave_enabled=1
- rpl_semi_sync_master_enabled=1
查看相关信息
- show plugins;
- show status like '%semi%';
- show global variables like '%semi%';
在mysql shell中加载插件和启动插件而不是通过编写配置文件
- help install;
- master节点
- install plugin rpl_semi_sync_master soname 'semisync_master.so';
- set @@global.rpl_semi_sync_master_enabled=0;
- install plugin rpl_semi_sync_master soname 'semisync_master.so';
- slave节点
- install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
- set @@global.rpl_semi_sync_slave_enabled=0;
- install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
- master节点