不败君

前端萌新&初级后端攻城狮

MySQL主从复制与读写分离

MySQL主从复制与读写分离

2020-09-30 11:34:00

围观(1840)

环境

Centos 7

MySQL 8


安装及配置 MySQL 8

可参阅这篇文章:CentOS7 安装 PHP7.3 和 MySQL8.0

如果新建了一个用户,还需要给这个用户远程连接的权限。

进入到 MySQL 模式,执行:

mysql> use mysql;
Database changed
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| localhost | bubaijun_com     |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

然后执行:

update user set host='%' where user='bubaijun_com';

注意:bubaijun_com 为新建用户的用户名。

刷新(清空)权限:

flush privileges

还需要在防火墙开放一下 3306 端口:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

重启防火墙:

systemctl restart firewalld.service

此时可通过数据库管理工具连接。

继续重复同样的操作安装第二台服务器的 MySQL.


配置主服务

使用 vim 修改 /etc/my.cnf 文件,添加两个配置:

## 注意每台服务器唯一
server-id=10  
## 开启二进制日志功能
log-bin=mysql-bin

需要重启 MySQL:

systemctl restart mysqld


配置从服务

同样使用 vim 修改 /etc/my.cnf 文件,添加两个配置:

## 设置server_id,注意每台服务器唯一
server-id=20
## 开启二进制日志功能,以备 Slave 作为其它 Slave 的 Master 时使用
log-bin=mysql-slave-bin
## relay_log 配置中继日志
relay_log=edu-mysql-relay-bin
## 需要主从同步的数据库名
replicate-do-db=cool

同样要重启 MySQL. 重启后进入 MySQL 并执行:

change master to master_host='192.168.31.151', master_user='bubaijun_com', master_password='Passbubaijun.com99&&', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 156, master_connect_retry=30;

上面代码中的 master_host 是主服务的地址,后面的 master_user 是创建的用户,以此类推自行修改。

master_log_file 和 master_log_pos 通过进入主服务器的 MySQL 并执行:

show master status;

可查看。


如:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      156 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

则 master_log_file = mysql-bin.000001

master_log_pos = 156

开启主从复制(需要进入到 MySQL 执行):

start slave;

可以查看主从同步状态(需要进入到 MySQL 执行):

show slave status \G;

如果显示 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes 则说明主从复制已经开启。


测试主从同步

在主服务器的 MySQL 上创建 cool 数据库,从服务器的 MySQL 上会自动也创建 cool 数据库,因为会自动同步:

1.png

继续创建数据库及插入数据测试:

2.png

为了插入数据测试更直观,博主开了两个客户端:

3.png


读写分离

读写分离是常见的数据库优化手段,假如数据库达到一定性能瓶颈,就可以先将数据库进行主从复制,写入数据和查询数据时使用两台不同配置(也可相同配置 无限制的 不同配置主要是按性能需求不一自行配置 如有些项目读多写少 有些读少写多)的服务器进行分开读和写。


数据库版本需要一致。

本文地址 : bubaijun.com/page.php?id=210

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语