首先需要准备两台linux系统的服务器,并且在两台服务器上分别安装mysql:
192.168.200.11 (主)
192.168.200.12 (从)
一、主库配置
首先连接192.168.200.11服务器
1、开启mysql日志binlog ( 如果是5.7.x版本,binlog默认是关闭的,所以需要手动配置去开启,8.x版本可以忽略此步骤)
- 首先通过命令查看mysql日志binlog的开启状态
show variables like '%log_bin%';
log_bin的值是OFF就代表binlog是关闭状态,打开binlog功能,需要修改配置文件my.cnf(linux)或my.ini(windows),然后重启数据库。
- 在配置文件my.cnf中增加配置
# 开启mysql的binlog日志
log-bin=mysql-binlog
# Server Id是数据库服务器id,随便写一个数都可以,这个id用来在mysql集群环境中标记唯一mysql服务器,集群环境中每台mysql服务器的id不能一样,不加启动会报错
server-id=11
# 其他配置
binlog_format = row # 日志文件格式
expire_logs_days = 0 # 执行自动删除距离当前15天以前的binlog日志文件的天数, 默认为0, 表示不自动删除
max_binlog_size = 200M # 单个binlog日志文件的大小限制,默认为 1GB
- 重启mysql服务
systemctl restart mysqld # 或者systemctl restart mysqld.service
- 再次查看mysql日志binlog的开启状态
show variables like '%log_bin%';
此时log_bin的值是ON就代表binlog已经开启
2、添加主库配置
- 在配置文件my.cnf中增加配置
server-id=11 # mysql 服务ID,保证整个集群环境中唯一,取值范围:1-2的23次方-1,默认为1
read-only=0 # 是否只读,1代表只读,0代表读写
#binlog-ignore-db=mysql # 忽略的数据,指不需要同步的数据库
#binlog-do-db=db01 # 指定同步的数据库
- 重启mysql服务
systemctl restart mysqld # 或者systemctl restart mysqld.service
- 登录mysql
mysql -uroot -p # 回车后输入密码
- 创建用户并赋予主从复制权限
#创建mainUser用户并设置密码 (mysql创建用户初始密码规则是包含大小写、特殊字符和数字,需要简单点可以修改密码规则)
CREATE USER 'mainUser'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@1234';
#为'mainUser'@'%'用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'mainUser'@'%';
- 退出mysql命令行
exit; # 输入后回车
- 重启mysql服务
systemctl restart mysqld # 或者systemctl restart mysqld.service
- 再次mysql -uroot -p登录mysql服务后,指令查看二进制日志坐标
show master status;
记录下 File 和 Position 对应的信息,从库配置需要用到。
二、从库配置
首先连接192.168.200.12服务器
- 找到mysql配置文件my.cnf,在配置文件my.cnf中增加配置
server-id=12 # mysql 服务ID,保证整个集群环境中唯一,取值范围:1-2的23次方-1,默认为1
read-only=0 # 是否只读,1代表只读,0代表读写
- 重启mysql服务
systemctl restart mysqld # 或者systemctl restart mysqld.service
- mysq -uroot -p登录mysql,执行以下指令 (注意:不同版本执行不同命令)
# 8.0.23及之前的版本
CHANGE MASTER TO MASTER_HOST='192.168.200.11',MASTER_USER='mainUser',MASTER_PASSWORD='Root@1234',MASTER_LOG_FILE='mysql-binlog.000005',MASTER_LOG_POS=4082064;
# 8.0.23及之后的版本
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.11',SOURCE_USER='mainUser', SOURCE_PASSWORD='Root@1234',SOURCE_LOG_FILE='mysql-binlog.000005',SOURCE_LOG_POS=4082064;
- 开启同步操作,在mysql登录状态下执行。(注意:不同版本执行不同命令)
# 8.0.22之前
start slave;
# 8.0.22之后
start replica;
- 查看主从同步状态,在mysql登录状态下执行。(注意:不同版本执行不同命令)
# 8.0.22之前
show slave status\G; # \G含义为行级展示
# 8.0.22之后
show replica status\G;
Slave_IO_Running 和 Slave_SQL_Running 的状态均为Yes,则主从库配置成功,可以进行增删改数据测试。
注:
1.如发现以上状态为Connecting,可能是服务器网络问题、主库主从权限用户未创建成功,或者从库配置主库信息时主从权限用户名、密码写错。
2.如发现以上状态正常,但是从库同步信息不生效,可能是主键冲突,可以尝试先备份从库数据,然后删除从库,新建从库,再将主库数据手动同步至从库之后再次尝试