mqsql主从复制

58 阅读1分钟
flush tables with read lock;#添加读锁
UNLOCK TABLES;#解锁

1、主库配置

server-id=1
read-only=0
log-bin=mysql-bin
#忽略的数据,指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog do-db=db01

2、配置完后重启

systemctl restart XXX

3、创建远程连接账号,分配权限

CREATE USER ‘用户名’@’地址’ IDENTIFIED WITH mysql\_native\_password BY ‘密码’
GRANT PEPLICATION SLAVE ON *.* TO ‘用户名’@’地址’

查看

SHOW GRANTS FOR '用户名'@'地址';
select user,host from user;

4、查看日志坐标

show master status;

file : 从哪个日志文件开始推送日志文件 
position : 从哪个位置开始唯送日志 
binlog_ignore_db : 指定不需要同步的数据库

5、从库配置

server-id = 2  # 服务器唯一标识,不能与主服务器相同
relay-log = mysql-relay-bin  # 启用中继日志
read-only=1

6、 配置完后重启

systemctl restart XXX

7、设置主数据库信息

CHANGE MASTER TO
  MASTER_HOST='master\_host\_ip',
  MASTER_PORT=13306,
  MASTER_USER='replication\_user',
  MASTER_PASSWORD='replication\_password',
  MASTER_LOG_FILE='mysql-bin.000001',  # 主服务器二进制日志文件
  MASTER_LOG_POS=1117;  # 日志位置,通常为0,除非有特定位置

7、开始复制

START SLAVE;
# STOP SLAVE;# 停止复制

8、验证复制状态

SHOW SLAVE STATUS\G

如果Slave_IO_Running和Slave_SQL_Running都显示为"Yes",则表示复制正在正常运行。

9、从库宕机处理

查看error日志中的pos,重新设置主数据库信息然后开始复制。

//如果遇到sql错误,重复执行让他跳过错误sql

STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE ;
SHOW SLAVE STATUS