Mysql主从复制:
原理:
Mysql主数据库用来进行写操作,从数据库用来读操作,保障数据安全,主库出现错误,也可使用丛库,保证业务正常进行
主数据库会将自己更改的数据保存在binlog日志中。
从数据库会定时查看是否有更改,如果有更改就会请求主数据库的binlog。
主数据库会将自己的binlog发送到从数据库的redo log下,从数据库查看自己的redo log,进行重放。
Mysql主从复制的配置(log的配置)
前提条件:
注意:检查firewalld,selinux,及主从时间是否一致。
主库的配置:
1.编写主库配置文件,在mysqld中添加server-id log_bin(丛库也可以进行配置)
vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server_id=120 (唯一的)
log_bin=ON
2.创建一个同步账号,用来进行主从复制
mysql -uxxx -p'xxx'
grant replication slave on *.* to 'rep'@'xxx.xxx.xx.%' idebtified by '密码';
show grants for 'rep'@'xxx.xxx.xx.%'; 查看某个用户是否具有相应权限
flush tables with read lock;
3.配置主从之前需要保证主从数据库状态一致,需要将主库完全备份,并在从上还原
主库命令行:
mysqldump -uxxxx -p'xxxx' -A > 文件
4.将备份文件传到从数据库上
scp 文件 远程ip:路径
5.在从主机上进行恢复
source 文件
6.解锁
unlock tables;
7.查看binglog以及pos位置
show master status;
丛库配置:
1.登录丛库数据库
2.编写主从复制命令
change master to
master_host="主库ip",
master_user="同步用户",
master_password="", 设置同步用户密码
master_log_file="", 使用show master status命令查看的log名称
master_pos=""; 使用show master status命令查看的pos
3.开启丛库复制
start slave;
4.查看是否同步成功
show slave status;
测试:
在主库上进行操作看是否同步成功。
Mysql主从复制(gtid)
1.主从都需要编写配置文件
vim /etc/my.cnf
[root@localhost ~]# more /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
server_id=120
log_bin=ON
gtid_mode=ON
enforce_gtid_consistency=true
log-slave-updates=1
2.查看主数据库的gtid
show master status;
3.丛库配置
stop slave;
mysql> change master to
-> master_host="192.168.27.120",
-> master_user="rep",
-> master_password="123456",
-> master_auto_position=1; 主库查看的gtid
start slave;
show slave status \G;