1、主从复制的原理:
首先打开主库的二进制日志,从服务器的I/O线程获取主库的二进制日志,写入到从库的中继日志中,然后由sql线程读取中继日志中的内容,并在从服务器上执行,完成数据的同步。
-
GTID方式
(1)主库操作
vim /etc/my.cnf #添加如下内容
server-id=1 #定义server-id 必写
log_bin=mylog #开启binlog日志,master必写
gtid_mode=ON #开启gtid
enforce_gtid_consistency=1 #强制gtid
重启数据库systemctl restart mysqld
主服务器创建用户:grant replication slave,reload,super on *.* to 'slave'@'%' identified by '123';
(2)从库操作
vim /etc/my.cnf #添加如下内容
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
重启数据库:systemctl restart mysqld
登录MySQL:mysql -uroot -p'123'
mysql> \e
change master to
master_host='主库IP地址',
master_user='授权用户',
master_password='授权密码',
master_auto_position=1;
->;
启动slave:start slave;
查看slave状态:show slave status\G
binlog日志方式
(1)主库操作
vim /etc/my.cnf #添加配置
log-bin=/var/log/mysql/mysql-bin
server-id=1
创建目录并赋予权限 mkdir /var/log/mysql ---------- chown -R mysql.mysql /var/log/mysql
重启MySQL:systemctl restart mysqld
查看master状态:show master status\G 记录下file和position
(2)从库操作
vim /etc/my.cnf #添加配置
server-id=2
重启MySQL:systemctl restart mysqld
进入数据库:mysql> \e
CHANGE MASTER TO
MASTER_HOST='192.168.188.145',
MASTER_USER='slave',
MASTER_PASSWORD='Liming@666',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=859;
->;
启动slave:start slave;
查看slave状态:show slave status\G
I/O线程和sql线程都为yes就证明成功了