MySQL 8.0 实现主从复制

暗香疏影 创作者

MySQL 8 严格来说这个是复制,所以官方的英文文档是Replica,而非Master Slave。
该方法均适用于Linux和Windows的MySQL。

MySQL Setting Up Replicas
Digital Ocean - How to Setup Replication

设置主节点

主要以参考Digital Ocean文档为主来修改配置
Linux是查看/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf
Windows是查看C:\ProgramData\MySQL\my.ini;

如果有bind-address则要么删除,允许全部ip访问,要么改为进来请求的IP。

1
bind-address  = source_server_ip

其次server-id = 1,而在从节点,是2/3/4/5… (主节点的id数字是最小的)

1
2
[mysqld]
server-id = 1

然后需要增加想要同步的数据库名:

例如:

1
2
3
4
[mysqld]

server-id = 1
binlog_do_db = database_name

然后我们可以重启mysql了。

1
2
# Windows使用net stop mysql80和net start mysql80
sudo systemctl restart mysql

这时候通过mysql命令查看:

1
2
3
4
5
6
7
8
9
mysql > SHOW MASTER STATUS;

Output
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 157 | db_name | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

随着mysql重启,mysql-bin.尾数也会增加。

创建复制用户

1
CREATE USER 'replica_user'@'replica_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';

这里需要注意,我们默认新增用户其实是用caching_sha2_password的模式连接,这需要SSL。所以我们改为用mysql_native_password的模式。你可以通过以下方式查询到用户连接模式:

1
select host, user, plugin from mysql.user

然后再

1
2
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'replica_server_ip';
FLUSH PRIVILEGES;

当然我们也先从mysqldump备份好SQL, 如果本身服务没在使用,就不用锁数据了。

设置从节点

1
2
3
4
5
6
[mysqld]

server-id = 2
binlog_do_db = database_name
relay-log = /var/log/mysql/mysql-relay-bin.log
# (Windows)relay-log = relay-bin.log [默认保存在C:\ProgramData\MySQL\Data]

配置完以上,即可重启服务。
然后在mysql内填写我们从SHOW MASTER STATUS得到的数值:

1
2
3
4
5
6
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='source_server_ip',
SOURCE_USER='replica_user',
SOURCE_PASSWORD='password',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=157;

之后,在从节点启用复制

1
2
START REPLICA;
SHOW REPLICA STATUS\G;

这时候可以在主节点测试是否成功。插入新数据,再去从节点查看是否有这个数据即可。

  • 标题: MySQL 8.0 实现主从复制
  • 作者: 暗香疏影
  • 创建于 : 2025-02-28 00:00:00
  • 更新于 : 2025-02-28 00:00:00
  • 链接: https://blog.23ikr.com/2025/02/28/2025-02-28-MySQL80-Replica-master-slave/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论
目录
MySQL 8.0 实现主从复制