Mysql主从搭建 (基于xtrabackup)

本文介绍了MySQL主从复制的原理及实现过程,包括主从环境配置、全库备份、数据同步等关键技术步骤。

 1 安装xtrabackup工具

安装在主库与从库上

本次编译安装不做详细介绍(太过繁琐,且要求较多),最后选择了rpm方式安装,这种方式安装非常快。

 

# yum install perl-Time-HiRes

# yum install perl-DBD-MySQL -y

#  yum install perl-Digest-MD5 -y          (依赖包)

 

下载网址:

https://www.percona.com/downloads/XtraBackup/LATEST/

 

 

# rpm -ivh percona-xtrabackup-2.2.9-5067.el7.x86_64.rpm

 

 

 

 

 

 2 主从机制介绍

 2.1复制解决的问题

         MySQL复制技术有以下一些特点:         

(1)     数据分布 (Data distribution )       

(2)   负载平衡(load balancing)         

(3)   备份(Backups)        

(4)     高可用性和容错(High availability and failover )

 2.2 复制如何工作 

        整体上来说,复制有3个步骤:   

(1) master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

(2)  slavemasterbinary log events拷贝到它的中继日志(relay log)    

(3)   slave重做中继日志中的事件,将改变写入自身的数据。

2-2-1描述了复制的过程:

 

2-2-1

 

 

 

3 主从搭建

3.1 主库环境检测

MySQL配置主从需要主库开启bin-log日志,来记录相应操作,首先检查主库书是否开启:

命令:show variables like “log_bin”;

 

 

 

如果未开启需要关库修改配置文件(my.cnf

1.主库配置/etc/my.cnf

增加server-id 和 bin-log

# vim /etc/my.cnf

server-id = 1

log-bin = mysql-bin  

 

因为这两个参数是动态参数,不用重启主库也可以生效,直接在开库情况下设置sql>set global server_id=1等)

 

 

开库检验bin-log

 

以上,主库环境已经符合。

 

 

3.2主库(master)配置

3.2.1 主库配置授权账号

mysql> grant replication slave on *.* to root@'192.168.199.185' identified by 'slave';

mysql> flush privileges;

 

 

3.2.2 主库机器上创建备份目录

# mkdir -p /home/mysql/full_data

3.2.3 .执行全库备份

3.2.3.1.备份

# innobackupex --defaults-file=/etc/my.cnf --user=root --password=mysql    --socket=/tmp/mysql.sock    /home/mysql/full_data

 

PS:备份完成后,会在/home/mysql/full_data/目录下生成一个时间点的目录,这里是2018-05-02_05-19-52。你也可以加一个--no-timestamp参数不产生这个目录,直接备份到/backup/full_data/目录下

3.2.3.2. redo log

下面preparing,undo撤销未提交的事务,重 redo log

# innobackupex  --defaults-file=/etc/my.cnf  --user=root  --password=mysql  --apply-log   --socket=/tmp/mysql.sock   /home/mysql/full_data/2018-05-02_05-19-52

 

 

3.3从库配置

3.3.1配置文件修改

1.停止从库

# /etc/init.d/mysqld stop

 

2. 修改配置文件

从库配置/etc/my.cnf

增加server-id

# vim /etc/my.cnf

server-id = 2



3.3.2 恢复数据到从库

1.把主库备份文件拷贝到从库机器

# scp -ap /home/mysql/full_data/2018-05-03_05-19-52 root@192.168.11.129:/home/mysql

3.修改恢复文件权限

# chown -R mysql:mysql /data/mysql/  

 

4. 使用xtrabackup恢复数据

 

# innobackupex --copy-back --user=root --password=mysql /home/mysql/2018-05-02_05-19-52

 

5.开库检验

 

 

3.3.3 开始主从同步

1. 配置从库 主从配置 

#登录从库并执行

mysql > CHANGE MASTER TO   

MASTER_HOST='192.168.199.179',

MASTER_USER='root',

MASTER_PASSWORD='slave',

MASTER_LOG_FILE='mysql-bin.000003',

MASTER_LOG_POS=470;

 

PS:以上信息都是主库配置的,特别是MASTER_LOG_FILEMASTER_LOG_POS,一定要主库查看后,从库填写时保证一致

2.开始同步

mysql> start slave;

3.查看同步状态

mysql> show slave status\G

 

图上标红的一定保证是yes,主从搭建才是正常的,如果slave_IO_running出现connecting,最常见是填写主库信息时密码写错,slave_sql_runing出现no,最常见原因是事务回滚造成的

 

 

 

4 主从测试

4.1主库建库

 

命令:create database test

 

 

从库检查:

 

 

4.2主库插表

 

 

从库检查:

 

 

 

 

4.3从库进程检测

主库进程:

 

从库进程:

 

至此MySQL主从搭建全部完成

<think>好的,用户想了解如何搭建MySQL主从同步的指南或最佳实践。我需要根据提供的引用资料整理出一个步骤清晰的教程。首先,我需要回顾用户提供的引用内容,看看有哪些关键步骤和注意事项。 引用1提到一主一从是基础,引用2解释了主从复制的原理和异步复制方式,引用3展示了查看同步状态的命令,引用4强调了参数一致性和版本统一的重要性,引用5给出了CHANGE MASTER TO的命令示例。这些都是搭建主从的关键点。 接下来,我需要按照逻辑顺序组织步骤。通常主从搭建的流程包括:环境准备、主库配置、从库配置、同步数据、启动复制、验证状态。同时需要注意参数设置、版本一致、权限配置等最佳实践。 需要确保主库开启binlog,创建复制账号,配置server-id。从库则配置server-id,指定主库信息,启动IO和SQL线程。数据同步部分可能需要使用mysqldump或物理备份。引用3中的SHOW SLAVE STATUS命令可以用来检查同步状态,IO和SQL线程必须都是Yes。 还要考虑可能的问题,比如防火墙设置,端口开放,权限是否正确。引用4提到参数一致,比如innodb_buffer_pool_size,所以需要提醒用户检查配置。版本统一也很重要,避免兼容性问题。 用户可能需要具体的命令示例,比如如何执行CHANGE MASTER TO,如何查看状态,如何导出数据。引用5中的命令需要调整参数,比如MASTER_HOST、MASTER_USER等,确保用户替换为自己的信息。 另外,最佳实践部分可以包括使用GTID、半同步复制、监控延迟等,这些在引用中未详细提到,但根据经验可以作为补充,但需要标注是扩展建议。 需要检查是否有遗漏的步骤,比如重启MySQL服务使配置生效,备份数据时的锁表处理,或者使用xtrabackup减少停机时间。引用中没有提到这些,但根据知识库,这些都是常见做法,可以适当加入。 最后,生成相关问题,可能涉及主从原理、延迟处理、故障排查等,参考用户之前的示例问题结构。</think>### MySQL主从同步搭建指南(一主一从) #### 一、环境准备 1. **服务器要求**:主从服务器需网络互通,建议使用相同MySQL版本(推荐5.7+)[^4] 2. **参数检查**:确保主从库的$server\_id$唯一,主库需开启二进制日志 ```ini # 主库my.cnf配置 [mysqld] server_id=1 log_bin=mysql-bin binlog_format=ROW ``` #### 二、主库配置步骤 1. **创建复制账号** ```sql CREATE USER 'repluser'@'%' IDENTIFIED BY 'Password123!'; GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%'; FLUSH PRIVILEGES; ``` 2. **查看主库状态** ```sql SHOW MASTER STATUS; ``` 记录输出中的$File$(如mysql-bin.000003)和$Position$(如154)[^5] #### 三、从库配置步骤 1. **基础配置** ```ini # 从库my.cnf配置 [mysqld] server_id=2 relay_log=relay-bin read_only=1 ``` 2. **数据同步**(任选其一) - **逻辑备份**(推荐小型数据库) ```bash mysqldump -h主库IP -uroot -p --all-databases --master-data=1 > db.sql mysql -uroot -p < db.sql ``` - **物理备份**(适合大型数据库,使用XtraBackup) 3. **启动复制线程** ```sql CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repluser', MASTER_PASSWORD='Password123!', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154; START SLAVE; ``` #### 四、验证同步状态 ```sql SHOW SLAVE STATUS\G ``` 确认以下关键指标: - $Slave\_IO\_Running: Yes$[^3] - $Slave\_SQL\_Running: Yes$[^3] - $Seconds\_Behind\_Master$应逐渐趋近0 #### 五、最佳实践建议 1. **网络优化**:主从服务器部署在同一局域网,延迟应<1ms 2. **安全加固**:限制repluser账号的访问IP,启用SSL加密连接 3. **监控配置**:定期检查$SHOW SLAVE STATUS$,设置延迟告警阈值 4. **高可用扩展**:建议配置半同步复制(需安装插件): ```sql INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; SET GLOBAL rpl_semi_sync_master_enabled=1; ``` #### 六、故障排查要点 1. **连接问题**:检查防火墙是否开放3306端口 2. **权限错误**:确认repluser账号密码正确且有REPLICATION SLAVE权限 3. **数据冲突**:从库发生写操作会导致$Last\_SQL\_Error$,需重建同步 ```mermaid graph TD A[主库] -->|二进制日志流| B[从库IO线程] B --> C[中继日志] C --> D[从库SQL线程] D --> E[应用数据变更] ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值