DataBases
简介
MariaDB
MySQL
数据类型
创建表
索引 index
主键 primary key
外键 foreign key
数据导入与导出
where条件判断
用户授权与密码
数据备份与恢复
数据热备
主从同步
读写分离
多实例
分库分表
集群-MHA
集群-PXC
存储引擎
本文档使用 MrDoc 发布
-
+
首页
主从同步
## 简介 MySQL主从同步是一种常用的数据库复制技术,将一个数据库的数据复制到另一个数据库中,以实现数据备份、负载均衡和高可用性等目的。 主从同步是异步的,主服务器和从服务器之间的延迟可能会导致从服务器上的数据不是最新的。 此外,主从同步还需要处理一些复杂的问题,例如数据冲突和主从服务器的故障转移等。 主从同步的工作原理如下: 1. 在主服务器上,MySQL会将所有的数据更改记录到二进制日志中(binlog),包括对数据库的插入、更新和删除操作等。 2. 从服务器会连接到主服务器,并请求复制二进制日志。主服务器会将二进制日志传输到从服务器上。 3. 从服务器会将接收到的二进制日志应用到自己的数据库中,以实现与主服务器的数据同步。 4. 从服务器会定期向主服务器发送心跳包,以确保主服务器仍然处于活动状态,如果主服务器出现故障,从服务器可以自动切换到另一个主服务器上 ## 结构1(1主多从) ### 配置 Master-主 修改主配置文件,添加日志ID=51、日志名 ```asp vim /etc/my.cnf ``` ```asp server_id=51 log-bin=master51 ``` 重启服务 ```asp systemctl restart mysqld ``` 查看日志文件和偏移量 ```asp show master status; ``` 创建授权用户done ```asp grant replication slave on *.* to done@"%" identified by 'JCss%6!8'; ``` 查看授权用户 ```asp show grants for done@'%'; ``` ### 配置 Slave-1 修改主配置文件,添加日志ID=52 ```asp vim /etc/my.cnf ``` ```asp server_id=52 ``` 重启服务 ```asp systemctl restart mysqld ``` 备份主数据库A(--master记录当前备份的时偏移量) ```asp mysqldump -uroot -p'JCss%6!8' --master-data db1 > /root/db1.sql ``` 将备份文件传输给新加的从数据库C ```asp scp db1.sql root@192.168.1.53:/root ``` 登录 ```asp mysql -uroot -p'JCss%6!8' ``` 声明备份的偏移量 ```asp mysql> change master to master_host='192.168.1.51', #添加主数据库A的IP -> master_user='repluser', #添加用户 -> master_password='JCss%6!8', #添加登录密码 -> master_log_file='master51.000001', #声明需要读取的日志文件名 -> master_log_pos=154; #声明备份的偏移量 ``` 启动slave ```asp start slave; ``` 查看slave状态 ```asp show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Slave_IO_Running: Yes #复制进程正在运行 Slave_SQL_Running: Yes #SQL 进程正在运行 cat /var/lib/mysql/master.info #查看本地保存的master信息 25 master51.000003 154 192.168.1.51 repluser JCss%6!8 3306 ``` ### 配置 Slave-2 修改主配置文件,添加日志ID=52 ```asp vim /etc/my.cnf ``` ```asp server_id=52 ``` 重启服务 ```asp systemctl restart mysqld ``` 备份主数据库A(--master记录当前备份的时偏移量) ```asp mysqldump -uroot -p'JCss%6!8' --master-data db1 > /root/db1.sql ``` 将备份文件传输给新加的从数据库C ```asp scp db1.sql root@192.168.1.53:/root ``` 登录数据库C ```asp mysql -uroot -p'JCss%6!8' ``` ```asp mysql> change master to master_host='192.168.1.51', #添加主数据库A的IP -> master_user='repluser', #添加用户 -> master_password='JCss%6!8', #添加登录密码 -> master_log_file='master51.000001', #声明需要读取的日志文件名 -> master_log_pos=154; #声明备份的偏移量 ``` 启动slave ```asp start slave; ``` 查看slave状态 ```asp show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Slave_IO_Running: Yes #复制进程正在运行 Slave_SQL_Running: Yes #SQL 进程正在运行 ``` ## 结构2(1主1从1从) ### 配置 Master-A 修改主配置文件添加日志ID、修改日志名 ```asp vim /etc/my.cnf ``` ```asp server_id=53 log-bin=master53 ``` 重启服务 ```asp systemctl restart mysqld ``` 查看日志文件和偏移量 ```asp show master status; ``` 为数据库B创建授权用户 ```asp mysql> grant replication slave on *.* to done@"%" identified by 'JCss%6!8'; ``` 查看授权用户 ```asp show grants for done@'%'; ``` ### 配置 Master-B + slave-A 修改主配置文件添加日志ID、修改日志名、开启级联复制 ```asp vim /etc/my.cnf ``` ```asp server_id=54 log-bin=master54 log_slave_updates ``` 重启服务 ```asp systemctl restart mysqld ``` 为数据库C创建授权用户 ```asp mysql> grant replication slave on *.* to done@'%' identified by 'JCss%6!8'; ``` 查看日志文件和偏移量 ```asp show master status; ``` 登录数据库 ```asp mysql -uroot -p'JCss%6!8' ``` ```asp mysql> change master to master_host='192.168.1.53', #添加主数据库A的IP -> master_user='repluser', #添加用户 -> master_password='JCss%6!8', #添加登录密码 -> master_log_file='master53.000002', #声明需要读取的日志文件名 -> master_log_pos=720; #声明备份的偏移量 ``` 查看主从状态 ```asp show slave status\G; ``` ### 配置 slave-B 修改主配置文件 ```asp vim /etc/my.cnf ``` 添加日志ID ```asp server_id=53 ``` 重启服务 ```asp systemctl restart mysqld ``` 登录数据库 ```asp mysql -uroot -p'JCss%6!8' ``` ```asp mysql> change master to master_host='192.168.1.53', #添加主数据库A的IP -> master_user='repluser', #添加用户 -> master_password='JCss%6!8', #添加登录密码 -> master_log_file='master54.000001', #声明需要读取的日志文件名 -> master_log_pos=437; #声明备份的偏移量 ``` ## 结构3(1主1主) ### 配置 Master主-A 修改主配置文件添加日志ID修改日志名 ```asp vim /etc/my.cnf server_id=56 log-bin=master56 ``` 重启服务 ```asp systemctl restart mysqld ``` 为数据库B创建授权用户 ```asp mysql> grant replication slave on *.* to done@"%" identified by 'JCss%6!8'; ``` 查看授权用户 ```asp show grants for done@'%'; ``` 查看日志文件和偏移量 ```asp show master status; ``` 设置主数据库B信息 ```asp mysql> change master to master_host='192.168.1.57', #添加主数据库B的IP -> master_user='done', #添加用户 -> master_password='JCss%6!8', #添加登录密码 -> master_log_file='master57.000001', #声明需要读取的日志文件名 -> master_log_pos=437; #声明备份的偏移量 ``` ### 配置 Master主-B 修改主配置文件添加日志ID改日志名 ```asp vim /etc/my.cnf ``` ```asp server_id=57 log-bin=master57 ``` 重启服务 ```asp systemctl restart mysqld ``` 为数据库A创建授权用户 ```asp mysql> grant replication slave on *.* to done@"%" identified by 'JCss%6!8'; ``` 查看授权用户 ```asp show grants for done@'%'; ``` 查看日志文件和偏移量 ```asp show master status; ``` 添加主数据库A信息 ```asp mysql> change master to master_host='192.168.1.56', #添加主数据库A的IP -> master_user='done', #添加用户 -> master_password='JCss%6!8', #添加登录密码 -> master_log_file='master56.000001', #声明需要读取的日志文件名 -> master_log_pos=437; #声明备份的偏移量 ```
done
2024年5月11日 10:30
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码