MySQL 读写分离

Posted by 暮夏有五 on 2021-01-28
Estimated Reading Time 3 Minutes
Words 787 In Total
Viewed Times

准备工作


我这里有一张简单的图向大伙展示 MySQL 读写分离的工作方式:

img

这里,我们准备两台机器:

  • 主机:192.168.248.128
  • 从机:192.168.248.139

主机配置


主机的配置就三个步骤,比较容易:

授权给从机服务器

1
2
$ GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.248.139' identified by '123';
FLUSH PRIVILEGES;

这里表示配置从机登录用户名为 rep1,密码为 123,并且必须从 192.168.248.139 这个地址登录,登录成功之后可以操作任意库中的任意表。其中,如果不需要限制登录地址,可以将 IP 地址更换为一个 %

修改主库配置文件,开启 binlog ,并设置 server-id ,每次修改配置文件后都要重启 MySQL 服务才会生效

1
$ vi /etc/my.cnf

修改的文件内容如下:

1
2
3
4
[mysqld]
log-bin=/var/lib/mysql/binlog
server-id=128
binlog-do-db = cmdb

如下图:

img

  • log-bin:同步的日志路径及文件名,一定注意这个目录要是 MySQL 有权限写入的(我这里是偷懒了,直接放在了下面那个datadir下面)。
  • binlog-do-db:要同步的数据库名,当从机连上主机后,只有这里配置的数据库才会被同步,其他的不会被同步。
  • server-id:MySQL 在主从环境下的唯一标志符,给个任意数字,注意不能和从机重复。

配置完成后重启 MySQL 服务端:

1
$ systemctl restart mysqld

查看主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复:

1
$ show master status;

至此,主机配置完成。

从机配置


从机的配置也比较简单,我们一步一步来看:

在 /etc/my.cnf 添加下面配置:

img

从机这里只需要配置一下 server-id 即可。

注意:如果从机是从主机复制来的,即我们通过复制 CentOS 虚拟机获取了 MySQL 实例 ,此时两个 MySQL 的 uuid 一样(正常安装是不会相同的),这时需要手动修改,修改位置在 /var/lib/mysql/auto.cnf ,注意随便修改这里几个字符即可,但也不可太过于随意,例如修改了 uuid 的长度。

使用命令来配置从机:

1
$ change master to master_host='192.168.248.128',master_port=3306,master_user='rep1',master_password='123',master_log_file='binlog.000001',master_log_pos=120;

这里配置了主机地址、端口以及从机登录主机的用户名和密码,注意最后两个参数要和 master 中的保持一致。

启动 slave 进程

1
$ start slave;

启动之后查看从机状态:

1
$ show slave status\G;

img

查看 slave 的状态,主要是下面两项值都要为为 YES,则表示配置正确:

1
2
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

至此,配置完成,主机创建库,添加数据,从机会自动同步。如果这两个有一个不为 YES ,表示主从环境搭建失败,此时可以阅读日志,查看出错的原因,再具体问题具体解决。

更多干货请移步: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 !