MySQL 主从复制

Posted by 彭楷淳 on 2021-01-28
Estimated Reading Time 3 Minutes
Words 914 In Total
Viewed Times

主从规划


首先规划两个 MySQL 实例:

  • 主机:192.168.66.131:33061
  • 从机:192.168.66.131:33062

当然大家可以准备多个从机,从机的配置步骤是一样的。接下来,我们就开始主从的配置。

配置主机


主机上的配置,主要是两个地方:

  • 第一个是配置一个从机登录用户
  • 第二个配置开启 binlog。

如果是 Docker 中创建的 MySQL 实例,默认只有一个用户,就是 root,这里我们需要进入到 MySQL 命令行,再给它分配一个用户。在宿主机中通过如下命令连接上主机:

1
$ mysql -u root -h 192.168.66.131 -P 33061 -p

输入密码后,进入到主机的命令行。然后给从机分配用户(因为我的宿主机上也安装了 MySQL,所以可以直接执行 mysql 命令,如果宿主机没有安装 MySQL,建议通过 docker exec 进入到 MySQL 容器中,然后执行如下命令):

1
$ GRANT REPLICATION SLAVE ON *.* to 'rep1'@'%' identified by '123';

这个表示从机一会使用 rep1/123 来登录主机,% 表示这个账户可以从任意地址登录,也可以给一个固定的 IP,表示这个账户只能从某一个 IP 登录。

接下来开启 binlog。binlog 的开启,需要修改 MySQL 的配置,找到 MySQL 配置文件的位置:

1
/etc/mysql/mysql.conf.d/mysqld.cnf

这就是 MySQL 的配置文件。我们要在这里进行修改操作。因为 MySQL 容器中,默认没有 VI 编辑器,安装费事,所以我们可以在宿主机中将配置文件写好,然后拷贝到 MySQL 容器中,覆盖原有配置。我们主要在该配置文件中添加如下内容:

1
2
3
log-bin=/var/lib/mysql/binlog
server-id=1
binlog-do-db = cmdb
  • 第一行表示配置 binlog 的位置,理论上 binlog 可以放在任意位置,但是该位置,MySQL 一定要有操作权限。
  • server-id 表示集群中,每个实例的唯一标识符。
  • bindlog-do-db 表示要同步的数据库有哪些。当从机连上主机后,并不是主机中的每一个库都要同步,这里表示配置哪些库需要同步。

img

重启 MySQL 服务,查看配置是否成功:

img

File 和 Position 需要记着,这两个标记了二进制日志的起点位置,在从机的配置中将使用到这两个参数。至此,主机的配置就算完成了。

配置从机


从机的配置比较简单,不用开启 binlog,也不用配置要同步的库,只需要在配置文件中,添加一个 server-id 即可。这是从机的 mysqld.cnf 配置:

img

配置完成后,重启 MySQL,然后进入到 mysql2 的命令行,执行如下命令,开启数据同步:

1
$ change master to master_host='192.168.66.131',master_port=33061,master_user='rep1',master_password='123',master_log_file='binlog.000001',master_log_pos=154;

配置完成后,开启从机进程。在从机命令行执行如下命令:

1
$ start slave;

接下来,执行 show slave status\G;查看从机状态:

img

这里重点查看 Slave_IO_Running 和 Slave_SQL_Running ,这两个的值必须为 Yes。如果有一个的值不为 Yes,表示配置失败,一般情况下,配置失败,下面会有失败提示。至此,我们的 MySQL 主从就算是配置成功了。

配置成功之后,我们可以通过 Navicat 或者 SQLyog 等工具连接上我们的两个 MySQL 实例,然后在主机中创建一个名为 db1 的库,你会发现从机中也会自动同步这个库。

更多干货请移步:https://antoniopeng.com


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !