【mysql主从】

本文详细介绍MySQL主从配置全过程,包括两台虚拟机的环境搭建、主从库的配置及验证方法,并通过具体实例演示主从同步的效果。

一、 MySQL主从介绍

MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步的
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
主从过程大致有3个步骤:
 1)主将更改操作记录到binlog里
 2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里
 3)从根据relaylog里面的sql语句按顺序执行
 主上有一个log dump线程,用来和从的I/O线程传递binlog
 从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地





二、准备工作

准备两台虚拟机,都安装上mysql并启动(安装参考之前mysql安装方法)

主库mysql启动:


从库mysql启动:



我们以2机器作为主库,1机器作为从库:



三、配置主

 修改my.cnf配置文件并增加内容:

vim  /etc/my.cnf

server-id=130

log_bin=amolinux2



 修改完配置文件后,启动或者重启mysqld服务:

/etc/init.d/mysqld restart



使用ls -lt 查看一下是否生成文件:



 把mysql库备份并恢复成amo库,作为测试数据:

 mysqldump -uroot mysql > /tmp/mysql.sql     备份mysql这个库
 mysql -uroot -e “create database amo”           创建新的amo库
 mysql -uroot amo < /tmp/mysql.sql                  还原amo库回mysql



 创建用作同步数据的用户:
 grant replication slave on *.* to 'repl'@slave_ip identified by '222222';   
 flush tables with read lock;      
 show master status;                  



四、配置从

修改my.cnf配置文件并增加内容:

vim  /etc/my.cnf

server-id=132           要求和主不一样


 

修改完配置文件后,启动或者重启mysqld服务:

/etc/init.d/mysqld restart



登录到mysql“

mysql -uroot



 把主上amo库同步到从上
 可以先创建amo库:



然后把主上的/tmp/mysql.sql拷贝到从上,然后导入amo库:

mysql -uroot amo < /tmp/mysql.sql
 



 stop slave;


实现主从同步的重新操作:
change master to master_host='172.16.17.71', master_user='repl', master_password='222222',master_log_file='amolinux2.000001', master_log_pos='659869';



再重新开启slave:

start slave;



检验是否配置成功主从:

show slave status\G

(这两行显示两个yes代表OK)



 还要到主上执行 unlock tables



 从上执行mysql -uroot
 show slave stauts\G


 看是否有:
 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes


 还需关注:
 Seconds_Behind_Master: 0  //为主从延迟的时间
 Last_IO_Errno: 0
 Last_IO_Error:
 Last_SQL_Errno: 0
 Last_SQL_Error:


五、测试主从同步

登录到到主上再切换到amo:



先查看一下数据库有哪些表:

show tables;



我们以db这个表做实现:
 select count(*) from db;
 truncate table db;



 登录到到从上再切换到amo:



再查看一下从上的数据库的表:



 select count(*) from db;



 主上继续drop table db;



然后查看一下主上的db表,已经没有了:



 再到从上查看db表,发现也没有了:




主服务器上
binlog-do-db=      //仅同步指定的库
binlog-ignore-db= //忽略指定库
从服务器上
replicate_do_db=
replicate_ignore_db=
replicate_do_table=
replicate_ignore_table=
replicate_wild_do_table=   //如aming.%, 支持通配符%
replicate_wild_ignore_table=


遇到主从不能正常同步,提示uuid相同的错误。这是因为克隆机器导致:

https://www.2cto.com/database/201412/364479.html 


MySQL主从复制是一种常见的数据库架构,用于实现数据的高可用性、负载均衡和备份。其核心机制是将主库(Master)上的数据变更记录到二进制日志(Binary Log),然后由从库(Slave)读取这些日志并在本地重放,从而实现数据同步。 ### 配置步骤 #### 1. 主库配置 在主库上需要启用二进制日志,并设置唯一的 `server-id`。以下是一个典型的配置示例: ```ini # /etc/my.cnf [mysqld] server-id = 1 log-bin = mysql-bin binlog-format = ROW binlog-do-db = mydb # 指定需要复制的数据库 expire_logs_days = 7 max_binlog_size = 100M ``` 配置完成后,重启 MySQL 服务以应用更改: ```bash systemctl restart mysqld ``` 接下来,创建一个用于复制的专用用户,并授予相应的权限: ```sql CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'SecurePass123!'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101'; FLUSH PRIVILEGES; ``` 最后,查看主库的状态信息,以便后续在从库中使用这些信息进行连接: ```sql SHOW MASTER STATUS; ``` 此命令将返回当前的二进制日志文件名和位置,这对从库连接至关重要[^2]。 --- #### 2. 从库配置 在从库上也需要设置唯一的 `server-id`,并确保与主库不同。此外,还需要指定一些其他参数来支持复制功能: ```ini # /etc/my.cnf [mysqld] server-id = 2 relay-log = mysql-relay-bin log-slave-updates = 1 read-only = 1 ``` 同样地,重启 MySQL 服务以应用新配置: ```bash systemctl restart mysqld ``` 为了保证数据一致性,通常会在初始阶段对主库进行一次全量备份,并将其导入到从库中。可以使用 `mysqldump` 工具完成这一操作: ```bash mysqldump -uroot -A --master-data=2 --single-transaction > /tmp/full.sql ``` 然后将该备份文件传输至从库服务器,并执行导入: ```bash mysql < /tmp/full.sql ``` 之后,在从库上执行如下 SQL 命令建立与主库的连接: ```sql CHANGE MASTER TO MASTER_HOST='10.0.0.201', MASTER_USER='repl', MASTER_PASSWORD='123456', MASTER_PORT=3307, MASTER_LOG_FILE='binlog.000001', MASTER_LOG_POS=628, MASTER_CONNECT_RETRY=10; ``` 确认无误后,启动复制进程: ```sql START SLAVE; ``` 检查复制状态是否正常: ```sql SHOW SLAVE STATUS\G ``` 理想情况下,`Slave_IO_Running` 和 `Slave_SQL_Running` 字段都应显示为 `Yes`,表示复制链路已成功建立[^4]。 --- #### 3. 数据同步原理 MySQL 主从复制的工作流程如下: - 主库将所有的数据变更写入二进制日志; - 从库通过 I/O 线程连接主库并请求日志数据; - 主库的 Binlog Dump 线程负责发送日志数据给从库; - 从库的 I/O 线程接收到日志后,将其写入本地的中继日志(Relay Log); - 最后,从库的 SQL 线程读取中继日志中的事件,并在本地重放这些 SQL 操作,以保持数据一致性[^2]。 --- #### 4. 生产环境注意事项 在生产环境中部署 MySQL 主从复制时,还需考虑以下几个方面: - **网络稳定性**:确保主从服务器之间的网络连接稳定可靠,避免因网络波动导致复制中断。 - **安全性**:限制复制用户的访问权限,仅允许特定 IP 地址连接;同时建议使用 SSL 加密通信,防止敏感信息泄露。 - **监控与维护**:定期检查复制状态,及时发现并解决延迟或错误问题;可借助第三方工具如 Percona Toolkit 进行自动化监控和优化。 - **故障恢复策略**:制定完善的故障切换方案,例如使用 MHA(Master High Availability)或 Orchestrator 实现自动故障转移,提高系统的可用性。 --- #### 5. 故障排查常见方法 如果遇到复制异常,可以通过以下方式进行排查: - 查看 `SHOW SLAVE STATUS\G` 输出中的 `Last_Error` 字段,了解具体的错误原因; - 检查 MySQL 错误日志,寻找可能的相关警告或错误信息; - 如果是因为网络问题导致复制中断,尝试重新启动复制线程; - 若存在较大的复制延迟,可通过调整 `slave_parallel_workers` 参数启用多线程复制,提升性能。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值