基于日志点的主从复制【不用】

1. 创建复制账户

image.png
image.png

2. 设置server-id

image.png

3. 制作一个master完整备份

使用innobackupex备份【推荐】

image.png
innobackupex会自动的保留position

使用mysqldump备份

image.png

  • 要加—master-data=1

导入slave image.png 查看Master pos:show master status image.png 也可以查看导出的文件(设置了—master-date会显示)

4. 拷贝到slave

image.png
mv 可以用 innobackupex —copy-back

5. 配置slave的server-id,并重启(保证主从server-id不一样)

6. 查看备份position

image.png

7. 配置slave replication【change master to 】

change master to master_host=’172.17.0.2’, master_user=’repl’, master_password=’123456’, master_port=3306, master_log_file=’binlog.000003’, master_log_pos=1326, master_connect_retry=30;

8. 启动replication,检查结果

image.png
image.png
image.png

基于GTID的复制【不用找position,方便】

GTID:UUID+TransactionID
UUID在image.png

1. Master slave设置为read-only

2. master slave 停机

3. 配置GTIDS

image.png

  • 开启gitd-mode要开启log-bin
  • 加配置skip-slave-start:不会自动的启动slave start(不自动启动复制)

4. 启动master slave,配置slave CHANGE MASTER TO

mysql> change master to
master_host=’192.168.137.113’, master_user=’repl’, master_password=’123456’, master_port=3306, master_auto_position=1;

slave改变master只需改变host即可。【方便】

在线开启gtid模式

通过修改gtid_mode参数。
MySQL5.7 GTID在线开启与关闭_aeolus_pu的博客-CSDN博客

【show slave status】主从复制相关参数

首先在服务器上执行show slave status;可以看到很多同步的参数:

  • Master_Log_File:SLAVE中的I/O线程当前正在读取的主服务器二进制日志文件的名称
  • Read_Master_Log_Pos:在当前的主服务器二进制日志中,SLAVE中的I/O线程已经读取的位置
  • Relay_Log_File:SQL线程当前正在读取和执行的中继日志文件的名称
  • Relay_Log_Pos:在当前的中继日志中,SQL线程已读取和执行的位置
  • Relay_Master_Log_File:由SQL线程执行的包含多数近期事件的主服务器二进制日志文件的名称
  • Slave_IO_Running:I/O线程是否被启动并成功地连接到主服务器上
  • Slave_SQL_Running:SQL线程是否被启动
  • Seconds_Behind_Master:从属服务器SQL线程和从属服务器I/O线程之间的时间差距,单位以秒计。

    【监控】主从延迟查看

  • show slave status显示参数Seconds_Behind_Master不为0,这个数值可能会很大

  • show slave status显示参数Relay_Master_Log_FileMaster_Log_File显示bin-log的编号相差很大,说明bin-log在从库上没有及时同步,所以近期执行的bin-log和当前IO线程所读的bin-log相差很大
  • mysql的从库数据目录下存在大量mysql-relay-log日志,该日志同步完成之后就会被系统自动删除,存在大量日志,说明主从同步延迟很厉害

主从复制配置 - 图15

SHOW SLAVE STATUS查看延迟并不准确

image.png
使用心跳表判断延迟。
image.png

show table like ‘replication%’

image.png

从库等待同步指定pos

image.png
image.png

从切换主步骤【reset master、reset slave all】

  1. stop slave
  2. reset master :删除本机binlog
    • 从库:reset master会清空gtid_executed变量 mysql.gtid_executed表,只保留一个初始binlog文件。
    • 不要随意在主库上执行reset master,这样做极有可能导致复制停止或造成主从数据不一致等严重后果,而且不易恢复。
  3. reset slave all:删除relaylog

reset slave,reset slave all,reset master都干了些啥? - igoodful - 博客园