性能更好的新服务器申请下来了, 我们决定在 2 台新服务器上使用 MySQL 5.7, 并且使用主从同步, 读写分离架构, 很不幸这个任务落到了我的头上. 读写分离是在业务代码中实现的, 在此不做详述, 介绍一下我搭建 MySQL 主从的过程.
环境介绍:
- Master 10.20.66.150
- Slave 10.20.66.151
端口都是 3306
一, 修改主库的配置 vi /etc/my.cnf
- [client]
- default-character-set=utf8mb4
- [mysql]
- default-character-set=utf8mb4
- <br>[mysqld]
- datadir=/var/lib/mysql
- socket=/var/lib/mysql/mysql.sock
- symbolic-links=0
- log-error=/var/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
- init_connect='SET collation_connection = utf8mb4_unicode_ci'
- init_connect='SET NAMES utf8mb4'
- character-set-server=utf8mb4
- collation-server=utf8mb4_unicode_ci
- skip-character-set-client-handshake
- server-id=2
- log-bin=log
- binlog-ignore-db=mysql
- binlog-ignore-db=information_schema
- binlog-ignore-db=performance_schema
- binlog-ignore-db=sys
需要注意的点:
1. 为了兼容 emoji 等特殊字节符, 配置中使用 utf8mb4 编码
2. 与主从相关的配置在整个配置的最下边, 主库和从库的 server-id 必须不同
3.binlog-ignore-db 设置不需要同步的库
二, 创建用于主从同步的账户
1. 登录 MySQL mysql -uroot -p
- create user 'sync'@'%' identified by 'Sync!0000'; (5.7 要求密码必须含有大小写英文, 符号和数字)
- grant FILe on *.* to 'sync'@'10.20.66.151' identified by 'Sync!0000'; (赋予 FILE 权限, 允许从从库 ip 访问主库)
- grant replication slave on *.* to 'sync'@'10.20.66.151' identified by 'Sync!0000'; (赋予主从同步权限)
- flush privileges;
6. 重启 mysql
三, 查看主库状态, 记录必要信息
1. 登录 MySQL
2.show master status; 记录 File 和 Position 对应的信息, 我这里是 log.000006 和 151
四, 修改从库配置
- [client]
- default-character-set=utf8mb4
- [mysql]
- default-character-set=utf8mb4
- [mysqld]
- datadir=/var/lib/mysql
- socket=/var/lib/mysql/mysql.sock
- symbolic-links=0
- log-error=/var/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
- init_connect='SET collation_connection = utf8mb4_unicode_ci'
- init_connect='SET NAMES utf8mb4'
- character-set-server=utf8mb4
- collation-server=utf8mb4_unicode_ci
- skip-character-set-client-handshake
- server-id=3
- log-bin=mysql-bin
- replicate-ignore-db=mysql
- replicate-ignore-db=information_schema
- replicate-ignore-db=performance_schema
- replicate-ignore-db=sys
- log-slave-updates
- slave-skip-errors=all
- slave-net-timeout=60
注意事项和主库配置相同, 使用 replicate-ignore-db 标记出不需要同步的库
五, 配置同步账号
1.systemctl restart mysql (重启 MySQL), 然后进入 MySQL
- stop slave;
- change master to master_host='10.20.66.150', master_user='sync',master_password='Sync!0000',master_file_log='log.000006',master_log_pos='151'; (最关键的一步, 将主库 ip, 同步账号的用户密码, show master status 得到的 file,position 写入. 在 5.7 之前的版本这一步的相关参数是写到配置文件中的, 5.7 如果再写进配置文件会报参数错误)
- start slave;
如果顺利的话, 到目前为止主从同步已经搭建完成, 在从库中使用 show slave status \G; 查看同步状态
看到以上结果说明生效了, 大家可以在主库上插入数据测试一下主从同步是否生效了~
来源: http://www.linuxidc.com/Linux/2018-07/153211.htm