Linux主从数据库配置

首先需要准备两台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%';
查看mysql日志binlog的开启状态

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%';
查看mysql日志binlog的开启状态

此时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 # 回车后输入密码
登录mysql
  • 创建用户并赋予主从复制权限
#创建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;
查看二进制日志坐标

记录下 FilePosition 对应的信息,从库配置需要用到。

二、从库配置

首先连接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_RunningSlave_SQL_Running 的状态均为Yes,则主从库配置成功,可以进行增删改数据测试。

注:
1.如发现以上状态为Connecting,可能是服务器网络问题、主库主从权限用户未创建成功,或者从库配置主库信息时主从权限用户名、密码写错。
2.如发现以上状态正常,但是从库同步信息不生效,可能是主键冲突,可以尝试先备份从库数据,然后删除从库,新建从库,再将主库数据手动同步至从库之后再次尝试

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容