目录
一、MySQL主从复制原理
1、什么是主从复制
2、主从复制原理
二、主从复制配置
1、主服务器数据库配置
(1)设置server-id值并开启binlog参数,启用二进制日志功能后,重启数据库。
(2)建立同步账号,在主服务器数据库上创建一个用于复制的用户,并授予复制权限。
(3)锁表设置只读,为后面备份准备,注意生产环境要提前申请停机时间
(4)查看主服务器数据库状态,获取二进制日志的位置和文件名
(5)备份主数据库数据
(6)解锁表
(7)将主服务器数据库备份数据上传到从服务器数据库
2、从服务器数据库配置
(1)设置server-id值并关闭binlog参数,启用从服务器功能后,重启数据库。
(2)还原从主库备份数据,检查还原
(3)设定从主库同步,即设置从服务器要复制的主服务器信息
(4)启动从库同步开关即从服务器的复制进程,检查状态
MySQL主从复制是一种数据复制技术,用于将一个MySQL数据库主节点的数据复制到其他MySQL数据库节点(一个或多个),以实现数据的备份、负载均衡和高可用性。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
(1)主服务器器(master)将数据更改记录到二进制日志(Binary Log)中,包括插入、更新和删除操作;
(2)从服务器(slave)会在一定时间间隔内对master二进制日志进行探测其是否发生更改,如果发生则开始一个I/OThread请求master二进制事件
(3)主服务器为每个I/O线程启动一个dump线程,用于向其发送二进制日志,并保存至从服务器本地的中(Relay Log)中,从服务器将启动SQL线程从中继日志中读取二进制日志,并将其应用到自己的数据库中,实现数据的复制,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。
[root@localhost ~]# vim /etc/my.cnf
log_bin=mysql-bin
server_id=11
[root@localhost ~]# systemctl restart mysqld
mysql> grant replication slave on *.* to 'rep'@'192.168.2.%' identified by '123456';
mysql> show grants for 'rep'@'192.168.2.%';
mysql> flush privileges;
mysql> flush tables with read lock;
mysql> show variables like '%timeout%';
mysql> show master status;
[root@localhost ~]# mysqldump -uroot -p123456 -A -B |gzip > /server/backup/mysql_bak.$(date +%F).sql.gz
mysql> unlock tables;
自己在/server/backup/目录中查看备份文件(mysql_bak.2023-07-23.sql.gz)
[root@localhost ~]# vim /etc/my.cnf
server_id=12
[root@localhost ~]# systemctl restart mysqld
[root@localhost ~]# cd /server/backup/
[root@localhost backup]# gzip -d mysql_bak.2023-07-23.sql.gz
[root@localhost backup]# mysql -uroot -p123456 < mysql_bak.2023-07-23.sql
mysql> change master to
-> MASTER_HOST='192.168.2.130',
-> MASTER_PORT=3306,
-> MASTER_USER='rep',
-> MASTER_PASSWORD='123456',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=742;
mysql> start slave;
mysql> show slave status \G