一、准备工作
两台 CentOS7 服务器,安装好 Mysql(CentOS 7 安装 MySQL) 并设置静态 IP,我这里两台服务器 IP 地址分别设置为 192.168.0.150,192.168.0.151。150 作为 master,151 作为 slave。
在 MySQL 主上创建数据库 users,在 users 下面创建表 user,user 表有两个字段 id 和 name,并随意插入几条记录。
二、主从同步配置
1、编辑 MySQL 主上的 /etc/my.cnf
vim /etc/my.cnf
添加以下内容
log-bin=151_mysql
server-id=1
- log-bin:MySQL 的 bin-log 的名字
- server-id : MySQL 实例中全局唯一,并且大于 0。
2、编辑 MySQL 从上的 /etc/my.cnf
server-id=2
- server-id : MySQL 实例中全局唯一,并且大于 0。与主上的 server-id 区分开。
3、在 MySQL 主上创建用于备份账号
mysql> CREATE USER 'repl'@'%' IDENTIFIED` WITH mysql_native_password BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
4、MySQL 主上加锁,阻止所有的写入操作
mysql> FLUSH TABLES WITH READ LOCK;
5、MySQL 主上,查看 bin-log 的文件名和位置
mysql> SHOW MASTER STATUS;
前面已经设置 log-bin=151_mysql,这里 File 还是 binlog.000001,所以需要刷新一下 log
mysql> flush logs;
再次执行 show master status,此时 File 变为我们前面设定好的 150_mysql
6、MySQL 主上 dump 所有数据,用于同步现有主上的数据。注意,前面主上已经锁表,因此我们不能在主上退出 mysql 客户端,需重新开启一个服务器的连接来执行以下命令。执行完毕后,会生成一个 dbdump.db 的文件。
mysqldump --all-databases --master-data > dbdump.db -uroot -p
7、将 dbdump.db 文件传送到从上。
scp dbdump.db root@192.168.0.151:~
从上也有了 dbdump 文件
现在 MySQL 主可以进行解锁,解锁后,主上可以写入数据
mysql> UNLOCK TABLES;
8、MySQL 从上导入之前 dump 的数据。注意,下面的命令不是在 mysql 的客户端执行的,需退出 mysql 的客户端。
mysql < dbdump.db -uroot -p
导入完毕之后,MySQL 从上拥有了主上同样的数据
9、MySQL 从上配置主从连接信息
mysql> CHANGE MASTER TO
-> MASTER_HOST='master_host_name',
-> MASTER_PORT=port_num,
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
- master_host_name : MySQL 主的地址
- port_num : MySQL 主的端口(数字型)
- replication_user_name : 备份账户的用户名
- replication_password : 备份账户的密码
- recorded_log_file_name:bin-log 的文件名
- recorded_log_position : bin-log 的位置(数字型)
- bin-log 的文件名和位置 是 步骤 5 中的 show master status 得到的。
10、MySQL 从上开启同步
mysql> START SLAVE;
查看 MySQL 从的状态
mysql> show slave status;
三、测试验证
在 MySQL 主上插入一条新数据
数据已同步到从上