准备2台Linux机器
安装MySQL8.x
安装步骤csdn上有很多教程,就不copy了,安装好查看下mysql的启动状态
我的MySQL 安装基本路径/usr/local/mysql
# 查看MySQL的启动状态
systemctl status mysqld
一主一从搭建
主机(master)创建slave授权
保证MySQL的root用户是管理员账号
- 主机登录MySQL服务:
mysql -uroot -proot
- 执行SQL给root用户的改变权限
use mysql;
update user set host='%' where user='root';
grant all privileges on *.* to 'root'@'%' ;
select user,host from user;
创建slave用户并授权
CREATE USER slave IDENTIFIED BY '123123';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;
配置MySQL的my.cnf
- 主机创建或编辑
my.cnf
文件并追加以下内容
vim /usr/local/mysql/conf/my.cnf
# 主机的serverId,任意数字,集群内唯一
server-id=1
# 开启logbin,并设置路径
log-bin=/usr/local/mysql/logs/mysql-bin
# 设置不要复制的数据库(可以重复设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 设置需要赋值的数据库
binlog-do-db=testdb
# binlog 格式:statement(默认) / row / mixed
binlog_format=STATEMENT
- 从机创建或编辑
my.cnf
文件并追加以下内容
vim /usr/local/mysql/conf/my.cnf
# 从机的serverId,任意数字,集群内唯一
server-id=2
# 启用中继日志
relay-log=/usr/local/mysql/logs/mysql-relay
- 主机重启
systemctl restart mysqld
- 从机重启
systemctl restart mysqld
- 主机登录MySQL服务,查看master状态信息并记录下File、Position两个字段值:
show master status;
- 从机登录MySQL服务,并执行下面的SQL脚本
CHANGE MASTER TO MASTER_HOST='192.168.3.74',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=157;
-
从机执行
start slave;
-
从机查看主从状态
show slave status \G;
如果出现下图红框中的内容则说明你配置成功。
-
因为我的服务器是虚拟机克隆出来的,所以两台MySQL的UUID是一样的,如遇到这种问题,则删除从机的
auto.cnf
文件即可
# 删除 auto.cnf 文件
rm -rf /usr/local/mysql/data/auto.cnf
验证搭建的一主一从环境
- 主机上创建数据库
create database testdb;
- 从机查看数据库列表
show databases;
从机可以正常显示出主机创建testdb
数据库,则说明环境搭建成功!
多主多从搭建
相信小伙伴已经将上面的一主一从环境已经搭建成功了,那下面的多主多从对于聪明的你来说非常容易
多主多从的环境说明
为了简单说明问题,我用2主(m1,m2)2从(s1,s2)共4台服务来搭建环境。
其中m1:s1,m2:s2互为主从,然后m1:m2互为主备。
m1:s1主从环境就借用上面搭建好的。然后再根据这个搭建一组m2:s2的主从
IP | 角色 |
---|---|
192.168.3.75 | Master1 |
192.168.3.77 | Slave1 |
192.168.3.78 | Master2 |
192.168.3.79 | Slave2 |
编辑Master1的 my.cnf
文件
server-id=1
log-bin=/usr/local/mysql/logs/mysql-bin
# 设置不要复制的数据库(可以重复设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 设置需要赋值的数据库
binlog-do-db=testdb
# binlog 格式:statement(默认) / row / mixed
binlog_format=STATEMENT
# 注意,在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1
编辑Slave1的 my.cnf
文件
server-id=2
# 作为从机, 需要配置relay-log,不需要log-bin
#log-bin=/usr/local/mysql/logs/mysql-bin
# 启用中继日志
relay-log=/usr/local/mysql/logs/mysql-relay
编辑Master2的 my.cnf
文件
server-id=3
log-bin=/usr/local/mysql/logs/mysql-bin
# 设置不要复制的数据库(可以重复设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 设置需要赋值的数据库
binlog-do-db=testdb
# binlog 格式:statement(默认) / row / mixed
binlog_format=STATEMENT
# 注意,在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2
编辑Slave2的 my.cnf
文件
server-id=4
# 作为从机, 需要配置relay-log,不需要log-bin
#log-bin=/usr/local/mysql/logs/mysql-bin
# 启用中继日志
relay-log=/usr/local/mysql/logs/mysql-relay
主从搭建
- Slave1执行脚本:
登录MySQL服务后,执行下面的脚本,注册主从关系
CHANGE MASTER TO MASTER_HOST='192.168.3.75',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=157;
- Slave2执行脚本:
登录MySQL服务后,执行下面的脚本,注册主从关系
CHANGE MASTER TO MASTER_HOST='192.168.3.78',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=157;
-
Slave1,Slave2 分别执行启动命令:
start slave;
-
查看主从状态:
show slave status \G;
至此两组的主从关系搭建完成
多主多从搭建
- Master1 执行脚本:
登录MySQL服务后,执行下面的脚本,注册主从关系
CHANGE MASTER TO MASTER_HOST='192.168.3.78',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=157;
- Master2执行脚本:
登录MySQL服务后,执行下面的脚本,注册主从关系
CHANGE MASTER TO MASTER_HOST='192.168.3.75',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=157;
-
Master1,Master2分别执行启动命令:
start slave;
-
查看主从状态:
show slave status \G;
-
双主双从环境搭建完成
验证双主双从
- Master1 创建数据库
在MySQL服务下执行命令create database testdb
- 任意的一台从机上查看是否存在
testdb
数据库
全部搭建结束
没有过多的理论描述,只有自己一步一步执行下来的截图,中间也有很多次的踩坑跳坑经验,如果能按照我这个流程完成操作下来,应该能让你规避很多坑。如果有不对的地方请指正~~~