MySQL5.7不停机不锁表主从同步实战

准备工作

环境

虚拟机201 1核 1G IP:192.168.0.201

虚拟机202 1核 1G IP:192.168.0.202 克隆自201,需要修改ip地址和MySQL server UUIDs

201防火墙对202开启3306端口

# 在201上执行
[root@192.168.0.201 ~]# firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.0.202" port protocol="tcp" port="3306" accept"
复制代码

修改MySQL server UUIDs

由于202这台服务器是从201克隆过来的,所有他们的MySQL server UUIDS是一样的,我们需要重新生成一个

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

#修改202上面的uuid

mv /db/mysql/auto.cnf /db/mysql/auto.cnf.back
service mysqld restart
复制代码

一、Master服务器201配置文件

basedir = /usr/local/mysql
datadir = /db/mysql
port = 3306
server_id = 201
socket = /tmp/mysql.sock
log-error = /data/log/mysql/mysql.log
pid-file = /db/mysql/mysqld.pid

innodb_buffer_pool_size = 268435456
innodb_log_file_size = 64M

log-bin=/db/binlog/mysql-bin
binlog-do-db=timophp
binlog-do-db=timosns
复制代码

log-error(mysql错误日志存放路径)

mkdir /data/log/mysql
touch /data/log/mysql/mysql.log
chown mysql:mysql /data/log/mysql/mysql.log
复制代码

log-bin

log-bin是设置binlog日志的位置并开启binlog日志的记录
mkdir /db/binlog
chown mysql:mysql /db/binlog
复制代码

binlog-do-db和binlog-ignore-db说明

binlog-do-db 需要记录binlog日志的数据库

binlog-ignore-db 不需要记录binlog日志的数据库

两个是对立的,一般只使用其中一个就可以了,如果数据库多,我们可以使用binlog-ignore-db来忽略其中几个,其它没被忽略的就会记录binlog日志

二、Slave从服务器202配置文件

basedir = /usr/local/mysql
datadir = /db/mysql
port = 3306
server_id = 202
socket = /tmp/mysql.sock
log-error = /data/log/mysql/mysql.log
pid-file = /db/mysql/mysqld.pid
复制代码

replicate-do-db和replicate-ignore-db说明

replicate-do-db 需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可

replicate-ignore-db 不需要复制的数据库,如果多个请重复设置这个选项即可

三、重启主、从MySQL服务

service mysqld restart

四、在主MySQL服务器操作

1)​创建复制​用户并授权

mysql> grant replication slave on *.* to 'syncslave'@'%' identified by '27OP3B0R9@C?4ex>';

说明:创建syncslave用户并分配replication slave权限(可以show grants;来查看权限​),用户名可以随机生成一个字符串。密码是27OP3B0R9@C?4ex>,可以随机生成一个字符串

mysql> flush privileges;

说明:刷新权限表

五、备份Master数据再同步

1)导出数据(在主库上执行)

[root@192.168.0.201 ~]# mysqldump -uroot -p123456 --flush-logs --single-transaction --master-data=2 timophp > /data/sql/timophp.sql
复制代码
说明:

--skip-lock-tables 不锁表

--master-data=2 在导出的时候同时生成binlog文件名和位置在导出的文件开头。这个很重要。因此第4步也不需要执行了,binlog的文件和位置可以从这里拿到。

--single-transaction 通过将导出操作封装在一个事务内来使得导出的数据是一个一致性快照

打包压缩

[root@192.168.0.201 ~]# tar -zcf /data/sql/timophp.sql /data/sql/timophp.sql.tar.gz

复制到从库

[root@192.168.0.201 ~]# scp /data/sql/timophp.sql.tar.gz root@192.168.0.202:/data/sql/timophp.sql.tar.gz

六、在从数据库上操作

1)解压

[root@192.168.0.202 ~]# tar -zxf /data/sql/timophp.sql.tar.gz

2)导入主库数据

[root@192.168.0.202 ~]# mysql -uroot -p timophp < /data/sql/timophp.sql

3)配置slave同步参数

mysql> change master to master_host='192.168.1.201',master_user='syncslave',master_password='27OP3B0R9@C?4ex>',master_log_file='mysql-bin.000010',master_log_pos=154;

说明:master_log_file和master_log_pos请看sql文件顶部有

4)启动slave同步功能​

mysql> start slave;

5)查看salve同步状态​

mysql>show slave status\G;

说明:Slave_IO_Running: Connecting表示正在链接Master,正常应该是Yes,这里是因为我Master没启动,Slave_SQL_Running: Yes,正常,保证这两个都是Yes

如果是为NO 执行:

mysql>stop slave

mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

mysql>START SLAVE;

在进行查看。

转载于:https://juejin.im/post/5c063dbc51882528c4469496

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值