MySQL主从复制搭建
1. 环境
1.1 操作系统
CentOS7最小化安装
# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"# cat /etc/redhat-release
CentOS Linux release 7.7.1908 (Core)
1.2 主从节点
本例中共涉及到两台服务器
- 10.10.2.231:主机名node1,作为主节点
- 10.10.2.232:主机名node2,作为从节点
1.3 MySQL版本
# mysql -pRoot@123 -e "select version()\G;"
version(): 8.0.26# rpm -qa |grep mysql
mysql-community-client-plugins-8.0.26-1.el7.x86_64
mysql-community-client-8.0.26-1.el7.x86_64
mysql-community-server-8.0.26-1.el7.x86_64
mysql-community-common-8.0.26-1.el7.x86_64
mysql-community-libs-8.0.26-1.el7.x86_64
mysql-community-libs-compat-8.0.26-1.el7.x86_64
2. 安装MySQL
可参考另一个博文:CentOS7用yum安装MySQL8。注意:后续root密码我们将使用Root@123。
3. 配置主从复制
3.1 配置server_id
3.1.1 配置主节点的server_id=1
-
修改
/etc/my.cnf
,在[mysqld]
节点下添加server_id=1
# vi /etc/my.cnf
[mysqld]
(省略部分内容...)
server_id=1 -
重启MySQL服务器:
service mysqld restart
-
确认修改结果:
# mysql -pRoot@123 -e "show variables like 'server_id\G'"
********************** 1. row **********************
Variable_name: server_id
Value: 1
3.1.2 配置从节点的server_id=2
参照主节点配置
3.2 主节点开启Binary Log
3.2.1 查看Binary Log状态
# mysql -pRoot@123 -e "show variables like 'log_bin'\G"
********************** 1. row **********************
Variable_name: log_bin
Value: ON
3.2.2 开启Binary Log
-
MySQL
8.0
之后版本Binary Log默认开启 -
MySQL
8.0
之前版本,修改/etc/my.cnf
,在[mysqld]
节点下添加log-bin=mysql-bin
,开启Binary Log。修改完成后重启MySQL服务:service mysqld restart
。# vi /etc/my.cnf
[mysqld]
(省略部分内容...)
log-bin=mysql-bin
3.3 主节点创建MySQL用户
登录主节点MySQL mysql -h10.10.2.231 -pRoot@123
执行:
mysql> CREATE USER 'reply'@'%' IDENTIFIED BY 'Reply@123' PASSWORD EXPIRE NEVER;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'reply'@'%';
mysql> FLUSH PRIVILEGES;
3.3 获取主节点二进制日志坐标
登录主节点MySQL mysql -h10.10.2.231 -pRoot@123
执行:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS\G;
********************** 1. row **********************
File: binlog.000003
Position: 1540
注意:记录File
和Position
的值,后面会用到,并且不要退出当前MySQL连接,保证所有库表的锁定状态。
3.4 从节点设置主从复制
登录从节点MySQL mysql -h10.10.2.232 -pRoot@123
执行:
mysql> CHANGE REPLICATION SOURCE TO SOURCE_HOST='10.10.2.231',SOURCE_USER='reply',SOURCE_PASSWORD='Reply@123',SOURCE_LOG_FILE='binlog.000003',SOURCE_LOG_POS=1540;
mysql> START SLAVE;
执行完成后可通过SHOW SLAVE STATUS;
确认从节点的同步状态:
mysql> SHOW SLAVE STATUS;
********************** 1. row **********************
(省略部分内容...)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(省略部分内容...)
最后还要记得之前尚未关闭的主节点的MySQL连接,把它关闭掉
4. 验证主从复制效果
在主节点中创建数据库:mysql -h10.10.2.231 -pRoot@123 -e 'create database test;'
在从节点中确认新创建的数据库已经同步到从节点:mysql -h10.10.2.232 -pRoot@123 -e 'show databases;'