将一台 MySQL 主服务器(或源服务器)的数据复制到另外一台或多台 MySQL 从服务器(或副本服务器)上称为主从复制。通过修改变量或 MySQL8 配置文件,您可以轻松实现复制全部或部分库表。
您可以通过主从配置来解决很多不同的问题,包括性能、备份问题,或为减轻系统故障等。
主从服务器都必须配置唯一的服务器ID、专用的用户和登录凭据,准备复制的数据库表等。
要将主服务器使用基于二进制文件的复制,必须确保开启二进制日志,并建立唯一的服务器ID。MySQL8 默认的服务器ID是1,你可以通过修改 server_id 来动态修改该值。
设置服务器ID:
#查看当前主服务器ID show variables like 'server_id'; # 设置主服务器ID set global server_id = 1;
启用二进制日志:
# 查看二进制日志状态 show variables like 'log_bin'; # 通过修改 mysql 配置文件来启用二进制日志 log-bin=/data/mysql/bin/master
每一个从服务器也必须设置一个唯一的服务器ID,可以由系统变量指定或者直接修改配置文件,从服务器ID必须唯一且不能和主服务器ID相同。
# 通过系统变量设置从服务器ID set global server_id = 11; # 通过配置文件设置从服务器ID [mysqld] server-id=11
关于从服务器二进制日志:一般从服务器是不需要设置二进制日志的,但是从服务器二进制日志也是默认启用的,从服务器的二进制日志主要是为了数据备份和崩溃恢复等作用。
每一个从服务器都需要使用 MySQL 用户名和密码连接到主服务器,因此主服务器必须有一个账号可供从服务器连接。您可以选择为每一个从服务器创建不同的账号,或为每一个从服务器使用相同的账号。
# 在主服务器上执行创建和授权命令 create user 'try8_slave'@'192.168.0.11' identified by 'try8_password'; grant replication slave on *.* to 'try8_slave'@'192.168.0.11';
从服务器在指定的点开始复制过程,首先要拿到主服务器二进制日志的当前坐标。
首先,设置主服务器为只读状态:
flush tables with read lock;
然后,查看主服务器当前二进制日志文件名和位置:
show master status;
小提示:其中 File 显示日志文件的名称,Position 显示文件的位置ID,先记录 File 和 Position 的值,稍后使用。
假设上述准备工作已完成,且主从服务器上都有相同的数据库,那么现在就可以在从服务器上建立连接进行自动复制了。在 MySQL 8.0.23 之前 使用 change master to 语句,最新版本使用change replication source to 语句。
# 老版本 change master to master_host='192.168.0.1', master_user='try8_slave', master_password='try8_password', master_log_file='master.000001', master_log_pos=1; # 新版本 change replication source to source_host='192.168.0.1', source_user='try8_slave', source_password='try8_password', source_log_file='master.000001', source_log_pos=1;
检测从服务器的状态:
show slave status
本教程示例中,192.168.0.1 为主服务器 IP 地址, 192.168.0.11 为从服务器 IP 地址,如需创建一主多从方式,只需要重复步骤创建类似 192.168.0.12、192.168.0.13... 等 IP 地址。
首先,打开主数据库 MySQL8 配置文件:
vim /etc/my.cnf 或:vim /etc/mysql/my.cnf 或:vim /etc/mysql/conf.d/mysqld.cnf
添加主数据库配置示例:
[mysqld] log-bin=/data/mysql/bin/master server-id=1 binlog-ignore-db=information_schema binlog-ignore-db=cluster binlog-ignore-db=mysql binlog-do-db=try8
然后,添加主数据库账号示例:
# 进入 MySQL 控制台 mysql -uroot -p # 账号创建和授权命令 create user 'try8_slave'@'192.168.0.11' identified by 'try8_password'; grant replication slave on *.* to 'try8_slave'@'192.168.0.11'; # 刷新权限,或者重启 MySQL 服务器 flush privileges; systemctl restart mysql; # 记录字段 File 和 Position,稍后使用 show master status;
首先,打开从数据库 MySQL8 配置文件:
vim /etc/my.cnf 或:vim /etc/mysql/my.cnf 或:vim /etc/mysql/conf.d/mysqld.cnf
添加从数据库配置示例:
[mysqld] log-bin=/data/mysql/bin/master server-id=11 binlog-ignore-db=information_schema binlog-ignore-db=cluster binlog-ignore-db=mysql replicate-do-db=try8
然后,处理从数据库权限:
# 进入 MySQL 控制台 mysql -uroot -p # 刷新权限,或者重启 MySQL 服务器 flush privileges; systemctl restart mysql; # 停止监听服务 stop slave; # 开启复制连接命令 # 老版本 change master to master_host='192.168.0.1', master_user='try8_slave', master_password='try8_password', master_log_file='master.000001', master_log_pos=1; # 新版本 change replication source to source_host='192.168.0.1', source_user='try8_slave', source_password='try8_password', source_log_file='master.000001', source_log_pos=1; # 启动监听服务 start slave;
最后,检测从服务器的状态:
show slave status
MySQL8 主从配置完成以后,您可以通过简单的更新语句测试是否复制成功,如果复制失败,请仔细核对如上每一步。
# 登录主库更新指定表数据 update try8_dev set try8_name='已更新' where try8_id=1; # 登录从库查看对应更新数据 select * from try8_dev where try8_id=1;
MySQL8教程 - MySQL8 主从配置,介绍 MySQL 和 MySQL8 数据库,从MySQL8 主从配置简单介绍开始,逐步到 MySQL8 主从配置详细示例等,通篇实用易懂,让 MySQL8 入门更加快速和简单。
《MySQL8教程》主打原创、全部免费,欢迎学习和转载,如需交流请加微信号:try8_cn。