一、安装mysql
二、主从复制模式
前置条件:两台机器ip分别为:192.168.40.128(master),192.168.40.129(slave)。
1. 主机配置
首先需要修改主机128的mysql配置
vim /etc/my.cnf
添加如下内容
# 服务器标识符, 确保每台服务器标识符都不一样 取值范围 1-2^32,默认为1
server-id = 1000
# 是否只读,1 代表只读,0 代表读写
read-only=0
# 忽略的数据,指不需要同步的数据库
# binlog-ignore-db=mysql
# 指定同步的数据库
# binlog-do-db=db01
重启mysql
service mysqld restart
重启成功后登录mysql
mysql -uroot -p
2. 主机创建用户
创建从机连接主机的用户
create user 'slave129'@'%' identified with mysql_native_password by '123456';
# 这里可以加上 with mysql_native_password 参数,因为 mysql8 的默认加密方式为
caching_sha2_password,后面从机连接主库可能会出现错误,后面 2.3 会提到。
给该用户分配复制权限
grant replication slave on *.* to 'slave129'@'%';
查看该主机的二进制文件坐标
show master status;
# file:从哪个日志开始推送日志文件
# position:从哪个位置开始推送日志
# binlog_ignore_db:指定不需要同步的数据库
到这里为止,主机不要执行任何DDL或者DML操作!!!!
3. 从机配置
修改129的mysql配置
vim /etc/my.cnf
添加如下内容
server-id=1130 # 一定不能与主机一致
read-only=1
super-read-only=1 # 超级用户的读写权限设置为只读
重启mysql
service mysqld restart
登录mysql
mysql -uroot -p
连接主机
change replication source to source_host='192.168.40.128',source_user='slave129',source_password='123456',source_log_file='mysql-bin.000012',source_log_pos=913;
#8.0.23以前版本语法
change master to master_host='xxx.xxx.xx.xx',master_user='xxx',master_password='xxx',master_log_file='xxx',master_log_pos=xxx;
注意:
- 参数设置为自己的,source_log_file 和 source_log_pos 要设置为主机show master status查询出来的结果,步骤 2.2 最后一张图。
- 如果在主机中创建用户时没有添加 with mysql_native_password 参数,则需要在执行上面语句时再在后面添加 master_connect_retry=30,get_master_public_key=1,添加后指令如下所示:
change replication source to source_host='192.168.40.128',source_user='slave129',source_password='123456',source_log_file='mysql-bin.000012',source_log_pos=913,master_connect_retry=30,get_master_public_key=1;
启动主从复制
start replica; # 8.0.23+ 版本
start slave;
4. 查看连接
从机中查看主从关系
show slave status\G
图中标记的两个字段为 yes ,则主从复制搭建成功。否则查看 Last_IO_ERROR 字段报错内容。
5. 测试主从复制
主机创建新表,查看从机是否正常复制。下面是建表测试语句,在主机中执行。
create database demo;
create table student (
sid int(10) primary key auto_increment,
sname varchar(16),
sage int(10),
ssex varchar(10)
) engine = Innodb default charset = utf8mb4 comment = "学生表";
insert into student (sname,sage,ssex) values('zhangsan', 29, '男');
从机中查看是否能复制该表内容即可。
三、 主主模式
主主模式需要注意自增主键的重复问题,采取的策略是一台机器以奇数自增,一台机器以偶数自增。
1. 修改原从机
修改129机器配置
vim /etc/my.cnf
添加以下内容,129机器自增主键以偶数增长
auto_increment_increment=2 # 自增步长
auto_increment_offset=2 # 偏移量
保存退出重启mysql
service mysqld restart
重启、登录mysql后创建128连接129的用户,并配置权限
create user 'slave128'@'%'identidied with mysql_native_password by '123456';
grant replication slave on *.* to 'slave128'@'%';
查看该机器的 master 信息
show status master;
在此后,不要再在该机器上执行DDL、DML语句,直到主主集群配置完成!!!
2. 修改原主机
在上面搭建的主从模式基础上,修改机器128配置。
vim /etc/my.cnf
添加下面内容,这样配置,128机器自增主键以奇数增长。
auto_increment_increment=2 # 增量为 2
auto_increment_offset=1 # 偏移量为 1
重启128的mysql
service mysqld restart
使用129服务器MySQL创建的 slave128 账号连接 129。
change replication source to source_host='192.168.40.129',source_user='slave128',source_password='123456',source_log_file='mysql-bin.000006',source_log_pos=362;
#8.0.23以前版本语法
change master to master_host='xxx.xxx.xx.xx',master_user='xxx',master_password='xxx',master_log_file='xxx',master_log_pos=xxx;
启动主从连接
start replica; # 8.0.23 版本后支持
start slave;
查看从机信息
show slave status\G
show replica status\G # 8.0.23 版本后支持
如图所示,两台机器上查看主从信息,图中标记的内容均为 yes,则主主集群搭建成功。