MySQL主从复制

1、主从复制的前提(基本上就是这些)
  • 1、两台以上的Mysql实例(独立的主机或者多实例),保证server_id(>0)、server_uuid不同

  • 2、主库开启二进制日志(binlog)、(主从服务器同步时间)

  • 3、主库要开启一个专业的复制用户(给replication slave权限)

  • 4、“补课的操作”,如果要新加一个从库,那么要把主库的数据备份,然后恢复到从库。

  • 5、通知从库可以进行自动复制,确认复制的起点(使用命令change master to 主库ip port user password 起点)

  • 6、在从库启动专用的复制线程(start slave)

2、步骤
  • 1、准备实例,且确保server_id、server_uuid不同(主库)

    命令:mysql -S /data/3306/mysql.sock -e "select @@server_id"

    命令:mysql -S /data/3307/mysql.sock -e "select @@server_uuid"

  • 2、主库开启binlog日志(主库)

    命令mysql -S 3306/mysql.sock -e "select @@ log_bin"; #1代表开启

    要改的配置文件是my.cnf---->{server_id=7 log_bin=/data/3306/mysql-bin}

  • 3、开启一个专用的复制用户(主库)

    创建且授权命令:mysql -S 3306/mysql.sock -e ""grant replication slave on . to tzh@'%' identified by 'root'";

    确认用户是否存在:mysql -S 3306/mysql.sock -e "select user,host from mysql.user";

  • 4、备份主库,恢复到从库(补课)

    全备份(主库):mysqldump -S /data/3306/mysql.sock -A --master-data=2 --single-transaction -R -E --triggers --max-allowed-packet=64M>/tem/full.sql

    -----master-data=2 记录备份时的二进制日志

    vim full.sql(查看同步到那个日志文件了)

    全备份1:mysqldump -S /data/3306/mysql.sock -A --master-data=2 --single-transaction -R --triggers >/backup/full.sql

    恢复(从库):登录到从库(1、mysql -S /data/3307/mysql.sock

    临时关闭二进制的记录(2、set sql_log_bin=0)

    恢复数据(3、source /tmp/full.sql

    恢复二进制的记录(4、set_sql_log_bin=1

  • 5、通知从库可以进行自动复制(从库)

    查看主库MySQL服务器二进制文件名与位置(mysql>SHOW MASTER STATUS;

    查看复制命令(help change master to

    复制的命令:CHANGE MASTER TO MASTER_HOST='192.168.1.30', MASTER_USER='repl', MASTER_PASSWORD='root', MASTER_PORT=3307, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=4724323, MASTER_CONNECT_RETRY=10;(更改对应的参数即可)

  • 6、启动复制线程(从库)IO线程,SQL线程

    start slave

    查看这两个线程是否启动成功(mysql -S /mysql/3308/mysql.sock -e "show slave statusG"| grep Running

     

    原理图

 

 

原文地址:https://www.cnblogs.com/hsyw/p/13097153.html