MySql主从复制:异步复制

目录

一、Master配置

二、Slave配置

三、简单排错

四、常用命令与参数配置


主库将编辑(非查询)操作写入到bin log中,从库负责读取主库的bin log,并在本地复制一份到relay log中,然后将relay log中的操作在从库执行一遍。

每个从库需要配置读取主库日志的文件名和日志位置,否则会执行已经存在数据的操作,从而导致异常。

主库和从库都必须有一个唯一的server_id,在my.cnf中配置。

一、Master配置

1、在my.cnf中开启bin log并设置server-id:vi /etc/my.cnf

[mysqld]
log-bin=mysql-bin  #设置mysql binlog的文件名前缀,如果不设置则默认为hostname-bin,如果修改了主机名,binlog文件也会随之改变,所以建议自己定义log-bin的文件名
server-id=11  #在主从库中保持唯一,取值范围为正整数uint32

     重启数据库:systemctl restart mysqld;

2、关闭主库my.cnf中的skip-networking参数,否则会导致主从库之间不能通讯。【默认可省略】

3、查看bin-log 开启状态:show variables like '%log_bin%';

     查看server-id配置是否成功:show variables like '%server%';

4、添加一个用于同步的主库用户,此用户只需要有复制权限:

     创建用户: create user '用户名'@'%' identified by '密码';

     赋予权限: GRANT REPLICATION SLAVE ON *.* TO '用户名'@'%';

5、设置主库为只读,不允许配置期间有任何的数据库修改操作:FLUSH TABLES WITH READ LOCK;

6、获取主库bin log日志信息,并记录下文件名称(file)和位置信息(position):show master status;

7、将当前的整个数据库备份还原到从库上:备份还原mysqldump  或  mysql备份还原:文件迁移

      备份数据库:mysqldump -u root -p --databases test > /data/mysql/test.sql

      使用sftp传输文件过去:

                                    连接从库服务器:  sftp 192.168.119.130

                                    传输文件:  put /data/mysql/test.sql /data/mysql/test.sql
              在从库中登录mysql并执行命令来还原数据库:source /data/mysql/test.sql

8、做好数据库备份之后就可以释放只读锁了:UNLOCK TABLES;

二、Slave配置

1、配置从库my.cnf的server-id,不做级联复制不必开启bin log:vi /etc/my.cnf

       server-id=12

       重启mysql:systemctl restart mysqld;

2、指定主库信息

CHANGE MASTER TO
MASTER_HOST = '主库IP',
MASTER_PORT = 主库端口,
MASTER_USER = '主库登录用户名',
MASTER_PASSWORD = '主库登录密码',
MASTER_LOG_FILE = '主库bin log日志文件名(配置Master第6步记录下的)',
MASTER_LOG_POS = 主库bin log文件位置(配置Master第6步记录下的);

 

3、启动从库的复制进程:start slave;

4、查看复制状态:show slave status\G   

       看到slave_io_running和slave_sql_running皆为yes就成功了,否则查看last_error来排错


     5、在主库中修改数据,并在从库中查看。

三、简单排错

1、连接错误

a、将my.cnf文件中的以下命令取消注释,如果没有此命令则加上:

           default-authentication-plugin=mysql_native_password 

b、重启Mysql服务: systemctl restart mysqld; 

      启动从库复制进程:start slave;

      重新查看状态:show slave status\G   

 2、其他错误

3、当从节点遇到无关紧要的错误,可以直接跳过:

STOP SLAVE;

SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

START SLAVE; 

四、常用命令与参数配置

命令描述
show slave status

检查从库slave复制的状态,是否正常。

Slave_IO_State:代表当前slave的状态;

Slave_IO_Running:负责读取主库bin log的IO线程是否运行;

Slave_SQL_Running:负责执行备库relay log的SQL线程是否运行;

Last_IO_Error:IO线程最后一次发生的错误信息;

Last_SQL_Error:SQL线程最后一次发生的错误信息;

Seconds_Behind_Master:备库的SQL线程比主库的bin log晚多少秒,0代表木有复制延迟;

SQL_Delay:人工设置的主从复制延迟时间;

show processlist查看MySql线程信息。
stop slave停止slave复制

stop slave IO_THREAD

或SQL_THREAD

停止IO或者SQL执行线程
start slave启动slave复制

start slave IO_THREAD

或SQL_THREAD

启动IO或者SQL执行进程
参数描述使用
replicate-do-db指定需要复制的数据库。

在my.cnf配置文件中使用:replicate-do-db=库名

多个数据库需要把这个参数写多份。

replicate-do-table指定需要复制的表在my.cnf配置文件中使用:replicate-do-db=库名.表名
replicate-ignore-table指定不需要复制的表,把它过滤掉在my.cnf中使用:replicate-ignore-db=库名.表名
replicate-wild-do-table复制符合匹配的表,可以使用_和%作为通配符在my.cnf中使用:replicate-wild-do-table=库名.表名%
replicate-wild-ignore-table排除符合匹配的表,可以使用_和%作为通配符在my.cnf中使用:replicate-wild-ignore-table=库名.表名%
binlog-format

binlog日志格式,有以下三种格式;

row:基于行,更安全但数据量更大

statement:基于sql语句

mixed:以上两者的混合使用

在my.cnf中使用:binlog-format=row
slave-parallel-workers在slave上启用多个sql thread线程来并行应用数据。默认为0。取值范围0-1024在my.cnf中使用:slave-parallel-workers=3
skip-slave-start在mysql启动时是否先不启动slave线程,暂停复制在my.cnf中使用:skip-slave-start=1
slave-parallel-type

启动并行之后,采用什么粒度的并行方式:

database:按不同的数据库并行,默认的。

logical_clock:按binlog中一组提交的事务。

在my.cnf中使用:slave-parallel-type=database
slave-skip-errors当slave的sql thread执行过程中可以忽略的错误,并继续执行数据复制,正常情况下当有错误发生的时候会停止复制,人工处理后才能继续。

在my.cnf中使用:

slave-skip-errors=errcode1,errcode2,....

slave-skip-errors=all

slave-skip-errors=ddl_exist_errors

binlog-do-db指定被记录到binlog的数据库在my.cnf中使用:binlog-do-db=库名
change master to master_delay从库复制的延迟时间(秒)在从库my.cnf中使用:change master to master_delay=60
   
  • 24
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值