MySQL 主从复制实现
MySQL 主从复制是一个异步的赋值过程,底层是基于mysql数据库自带的二进制日志功能,就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能,无需借助第三方工具。
MySQL 复制过程分为3步
- master 将改变记录到二进制日志(binary log)
- slave将master的binary log 拷贝到它的中继日志(ralay log)
- slave重做中继日志中的事件,将改变应用到自己的数据库中
配置条件:两个数据库
主库master 192.168.50.100
从库 slave 192.168.50.101
主库master 配置
- 修改mysql数据库的配置文件 /etc/my.cnf ,添加条件
[mysql] ==========以下是配置文件中的信息============= # 配置编码为utf8 ,可以暂不配置 character_set_server=utf8mb4 init_connect='SET NAMES utf8mb4' # 配置要给Slave同步的数据库,不设置会同步所有修改的数据库 binlog-do-db=test # 不用给Slave同步的数据库,一般是Mysql自带的数据库就不用给Slave同步了 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema binlog-ignore-db=sys # 自动清理30天前的log文件 expire_logs_days=30 # 启用二进制日志,必须开启 log-bin=mysql-bin # Master的id,这个要唯一,唯一是值,在主从中唯一 必须开启 server-id=3
- 重启MySQL
systemctl restart mysqld
- 查看log_bin日志是否启动成功
--
show variables like '%log_bin%';
- 查看master状态
show master status;
- 登陆Master的数据库,并创建一个用户用于同步数据:
--这是一个教程给的创建一个用来同步的用户 create user 'backup'@'%' IDENTIFIED BY 'LDCldc-2020'; grant file on *.* to 'backup'@'%'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%'; --这是另一个教程给的语句比较短 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by ‘xxxxx’; --xxxx是用户密码
查看master状态,记录下这两个数据File
和Position
要记住,后面配置Slave的时候要使用到这两个数据。 master配置完成
show master status;
从库 slave 配置:
- 在Slave中同样要创建test数据库,并且授权给test用户:(这一步不要的话在主库操作的其他数据库也会同步到slave)
# 创建同步数据的test数据库 create database test default character set utf8mb4 collate utf8mb4_general_ci; # 授权 grant all privileges on test.* to 'test'@'%';
- 修改mysql数据库的配置文件 /etc/my.cnf ,添加条件
# 配置从服务器的ID,唯一的 server-id=4 #加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。 read_only = 1 master_info_repository=TABLE relay_log_info_repository=TABLE
- 重启Slave中的Mysql服务:
systemctl restart mysqld
- 在Slave中添加Master的信息:
-- master_host是Master的ip,master_log_file和master_log_pos就是配置之前查看Master状态时显示的File和Position信息 change master to master_host='192.168.163.156',master_port=3306,master_user='backup',master_password='*password*',master_log_file='mysql-bin.000001',master_log_pos=1513;
- 登录MySQL数据库,查看slave状态:(当看到
Slave_IO_Running
和Slave_SQL_Running
都是yes的时候,这表示主从配置成功。)
show slave status\G
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步