MySQL主从同步(一主一从、一主多从、多主、多主多从)结构配置
如果搭建主主环境,参照此链接!https://www.jianshu.com/p/4267d00b3fa1
方便理解,不添加任何附加的服务,例如如下:
服务列 备注
server-id=2 MySQL 服务器 ID,必须全局唯一
log-bin=mysql-bin 开启 Binlog 并写明存放日志的位置,一般是放在data目录中
log-bin-index=mysql-bin.index 指定二进制日志索引文件的名称
binlog-do-db=test 从SQL线程将复制限制到指定的数据库(多个写多行)
binlog-ignore-db=mysql 主服务器不应将对给定数据库的更新记录到二进制日志中
replicate-ignore-db=mysql 告诉从SQL线程不要复制到指定的数据库
expire_logs_days=7 这几天后清除二进制日志
relay_log=mysql-relay 中继日志文件的前缀
relay_log_index=mysql-relay.index 用于保存最近中继日志列表的文件的位置和名称
max_binlog_size=100M 如果对二进制日志的写入导致当前日志文件大小超过此变量的值,则服务器会旋转二进制日志(关闭当前文件并打开下一个文件)
log_slave_updates=1 从服务器从主服务器收到的更新是否应记录到从服务器自己的二进制日志中。
skip-slave-start 指示从服务器在服务器启动时不要启动从线程。要稍后启动线程,
slave-skip-errors=all 当查询从提供的列表中返回错误时,告诉从属线程继续复制
sync_binlog=1 等于1在提交事务之前启用二进制日志到磁盘的同步,等于0禁用MySQL服务器将二进制日志同步到磁盘的功能。取而代之的是,MySQL服务器依靠操作系统不时地将二进制日志刷新到磁盘上,其中N的值不是0或1:是N二进制日志提交组已收集之后,二进制日志将同步到磁盘 。在电源故障或操作系统崩溃的情况下,服务器可能提交了尚未刷新到二进制日志的事务。由于磁盘写入次数的增加,此设置可能会对性能产生负面影响。较高的值可以提高性能,但会增加数据丢失的风险。
auto_increment_increment=2 AUTO_INCREMENT列增加此值
auto_increment_offset=2 偏移已添加到AUTO_INCREMENT列
sync_binlog=1 为了在InnoDB与事务一起使用的复制设置中获得最大的持久性和一致性,请使用以下设置
innodb_flush_log_at_trx_commit=1。 为了在InnoDB与事务一起使用的复制设置中获得最大的持久性和一致性,请使用以下设置
read_only=1 只允许读 非root超级用户
relay_log_recovery=1 当slave从库宕机时,relay-log文件损坏,放弃未执行的relay,并且重新从master上获取文件日志,保证了relay-log文件的完整性,当relay_log_recovery=1才开启
super_read_only=1 只允许读,root超级用户
一主一从、一主多从
角色 ip地址 服务器server-id
主(master) 192.168.2.100 100
从(slave) 192.168.2.101 101
………… …… ……
主-master配置
1、修改主机得my.conf文件
[mysqld]
log-bin=mysql-bin
server-id=100
2、重启mysql
service mysqld restart
3、添加同步数据账号
用户:slave 密码:123456
grant replication slave on *.* to slave@'%' identified by '123456';
4、刷新权限
flush privileges;
5、查看配置情况,
SHOW MASTER STATUS\G
SHOW MASTER STATUS;
该File列显示日志文件的名称,该列显示文件Position中的位置。,记住它们得值,稍后在设置从站时需要它们
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 3555 | | | |
+------------------+----------+--------------+------------------+-------------------+
从-slave,多从重复下面操作
1、修改my.conf文件
[mysqld]
server-id=101
2、重启mysql
service mysqld restart
3、登陆设置复制二进制文件的权限及位置
停止复制进程
STOP SLAVE;
设置复制二进制文件的权限及位置
CHANGE MASTER TO
MASTER_HOST='192.168.2.100',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=3555;
启动复制进程
start slave;
4、查看是否配置成功
SHOW PROCESSLIST;
SHOW SLAVE STATUS;
SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.100
Master_User: synchro
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 1437
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
************
两项Slave_IO_Running、Slave_IO_Running同为yes表示成功
多主、多主多从
角色 ip地址 服务器server-id
主(master_a) 192.168.2.100 100
主(master_b) 192.168.2.101 101
从(slave_a) 192.168.2.102 102
从(slave_b) 192.168.2.103 103
………… …… ……
主 master配置
1、修改主机得my.conf文件
主 master_a
[mysqld]
server-id=100
log-bin=mysql-bin
auto-increment-increment = 2
auto-increment-offset = 1
log-slave-updates = 1
主 master_b
[mysqld]
server-id=101
log-bin=mysql-bin
auto-increment-increment = 2
auto-increment-offset = 2
log-slave-updates = 1
2、重启mysql
service mysqld restart
3、添加同步数据账号
用户:slave 密码:123456
grant replication slave on *.* to slave@'%' identified by '123456';
4、刷新权限
flush privileges;
5、查看配置情况,
SHOW MASTER STATUS\G
SHOW MASTER STATUS;
该File列显示日志文件的名称,该列显示文件Position中的位置。,记住它们得值,稍后在设置从站时需要它们
主 master_a
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001| 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
主 master_b
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 153 | | | |
+------------------+----------+--------------+------------------+-------------------+
6、登陆设置复制二进制文件的权限及位置
主 master_a
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.2.101',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=153;
start slave;
主 master_b
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.2.100',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
start slave;
主 master配置
1、修改my.conf文件
从 slave_a
[mysqld]
server-id=102
从 slave_b
[mysqld]
server-id=103
2、重启mysql
service mysqld restart
3、登陆设置复制二进制文件的权限及位置
从 master_a
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.2.100',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
从 master_b
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.2.101',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000002',
MASTER_LOG_POS=153;
START SLAVE;
4、查看是否配置成功
SHOW PROCESSLIST;
SHOW SLAVE STATUS;
SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.100
Master_User: synchro
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 1437
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
************
两项Slave_IO_Running、Slave_IO_Running同为yes表示成功
安装完成测试
创建数据库
create database test;
使用数据库
use test;
创建数据表
CREATE TABLE `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(45) DEFAULT NULL,
`age` tinyint(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
查看数据表
show tables;
在从库中查看是否也会创建表 如果创建了 则mysql主从复制算是基本搭建完成
查看数据表
show tables;
在主库中测试,在从库中查看是否一致
查询
select * from test;
插入
insert into test(name,age) values('张三',30),('李四',50);
修改
update test set name='王五' where id = 1;
删除
delete from test where id =2;
测试完成
取消从数据库
stop slave
reset slave
change master to master_host=' ';