Linux下的Mysql的主从备份

本文详细介绍MySQL数据库的主从复制配置过程,包括在主服务器上启用二进制日志、创建备份用户、配置从服务器的复制参数以及解决常见的同步问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL复制概述

MySQL数据库支持同步复制、单向、异步复制,在复制的过程中一个服务器充当主服务,而一个或多个服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

注意:当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。

MySQL数据复制的原理[3个进程]

MySQL复制基于主服务器在二进制日志【binlog】中跟踪所有对数据库的更改(更新、删除等)。因此,复制必须在主服务器上启用二进制日志,每个从服务器从主服务器接收主服务器已经记录到其二进制日志【relaylog】的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。

image

Linux下的Mysql服务器主备的实现

[主服务器:192.168.25.136]    [从服务器:192.168.25.144]

在主服务器136上查看主状态以最新的服务器状态为准,在从服务器配置

mysql -uroot -proot
show master status\G

image

第一行表明 当前正在记录的 binarylog文件名是: mysql-bin.000001.

第二行,810 表示当前的文件偏移量, 就是写入在mysql-bin.000001 文件的记录位置。

第三行和第四行,表示需要记录的数据库和需要忽略的数据库。 只有需要记录的数据库,其变化才会被写入到mysql-bin.000001日志文件中。

注意:如果显示"Empty Set",则需要检查是否开启了bin文件(小规模文件my-small.cnf默认不开启,本博客的mysql配置以small为准,因此需修改)

sed -i 's/#log-bin=mysql-bin/log-bin=mysql-bin/g' /etc/my.cnf

在主服务器136上面创建专门用于备份的用户double

GRANT REPLICATION SLAVE ON *.* TO 'double'@'192.168.25.144' IDENTIFIED BY 'double';

image

开启主服务器136的 binarylog

  vim /etc/my.cnf

# 添加如下内容
binlog_format=mixed                                                                                                       
binlog-ignore-db=mysql                                                                                                   
auto-increment-offset=1                                                 
auto-increment-increment=3
注:binlog-ignore-db 表示,需要忽略哪些数据库。我这里忽略了其他的4个数据库。
 假设需要将来可能需要3台服务器做备份, 所以auto-increment-increment 设为3.   而 auto-increment-offset=1 表示这台服务器的序号从1开始, 不超过auto-increment-increment。这样做之后, 我在这台服务器上插入的第一个id就是 1, 第二行的id就是 4了, 而不是2.

重启136服务器的mysql服务

service mysqld restart
	==>/etc/inint.d/mysqld restart

获取主服务器136状态

如果是全新安装的, 那么不需要同步初态,直接跳过这一步,到后面直接查看主服务器状态。

如果已经有了一个数据库ftl数据库作为初态。

先锁定 hello数据库:  flush tables with read lock;
然后导出数据:   mysqldump -uroot -proot ftl -B -x> /tmp/ftl.sql
查看A服务器的binary日志位置  show master status\G   记住这个文件名和 位置, 等会在从服务器上会用到
解除锁定了     unlock tables;

image

设置从服务器 144需要复制的数据库

修改从服务器的server_id

 sed -i 's/server-id.*1/server-id       = 2/g' /etc/my.cnf

修改: vim /etc/my.cnf

# 添加如下内容
relay-log = relay-log 
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema

注:replicate-ignore-db 复制时需要排除的数据库。除开系统的几个数据库之外,所有的数据库都复制。

relay_log 中继日志的名字。 前面说到了, 复制线程需要先把远程的变化拷贝到这个中继日志中, 再执行。
log-slave-updates 意思是,中继日志执行之后,这些变化是否需要计入自己的binarylog。 当你的B服务器需要作为另外一个服务器的主服务器的时候需要打开。  就是双主互相备份,或者多主循环备份。 我们这里需要, 所以打开。

重启144服务器的mysql服务

service mysqld restart
	==>/etc/inint.d/mysqld restart

查看从服务器的server_id

mysql -uroot -proot
SHOW VARIABLES LIKE 'server_id';  # 显示跟配置一致即可,前面我们设置2

 从服务器测试主服务器的注册的double用户是否正常

mysql -h 192.168.2.144 -udouble -pdouble

在从服务器144上导入主服务器136的初态

scp root@192.168.25.144: /tmp/ftl.sql  /tmp/ftl.sql
mysql -uroot -proot < /tmp/ftl.sql [没有添加库名,是因为备份的时候使用了-B,里面还有自动建库的语句]

开启同步, 在从服务器144服务器上执行

CHANGE MASTER TO 
       MASTER_HOST='192.168.25.136',              # 主服务器IP
       MASTER_USER='double', 
       MASTER_PASSWORD='double',                  # 主服务器设置的用户
       MASTER_LOG_FILE='mysql-bin.000001',        # 根据主服务器看 : show master status\G 里面的 File
       MASTER_LOG_POS=2702;                       # 根据主服务器查看; show master status\G 里面的 Position

从服务器重启mysql服务, 然后查看slave线程是否正常

上面几个参数要跟上面的保持一致,而且IP尽量用补全,除非在局域网环境,多台备份服务器

image

如果其中一个是No, 那就说明不成功。需要查看mysql的错误日志[/usr/local/mysql/data/*.err]

密码,防火墙,ip地址不对等都会导致失败,查看日志文件即可

主从复制结果

在主服务器的ftl数据库的user表中 连续插入了3条数据, 查看从服务器是否同步数据了

image

转载于:https://www.cnblogs.com/ftl1012/p/9297034.html

### 配置 MySQL 主从复制备份 #### 1. 环境准备 在配置 MySQL 主从复制之前,需要确保两台服务器已经正确设置了主机名映射。可以通过编辑 `/etc/hosts` 文件来完成域名解析[^2]。 ```bash vim /etc/hosts ``` 添加如下内容: ``` 192.168.126.141 mysql-master 192.168.126.139 mysql-slave ``` 这一步是为了让主节点 `mysql-master` 和从节点 `mysql-slave` 能够通过名称互相访问。 --- #### 2. 安装 MySQL 在开始配置前,需确认两台服务器均已安装相同版本的 MySQL 数据库。如果尚未安装,则按照以下步骤操作。 ##### 2.1 检查并清理旧版 MySQL 运行以下命令检查是否存在已安装的 MySQL 版本,并清除残留文件[^3]。 ```bash [root@localhost ~]# rpm -qa | grep mysql ``` 若有输出结果,表示存在旧版 MySQL,可以使用以下命令卸载: ```bash [root@localhost ~]# yum remove $(rpm -qa | grep mysql) ``` 接着删除可能存在的目录和文件: ```bash rm -rf /usr/lib64/mysql /usr/share/mysql find / -name mysql | xargs rm -rf ``` --- #### 3. 配置 Master 节点 (主节点) ##### 3.1 修改 my.cnf 配置文件 编辑 MySQL 的配置文件 `/etc/my.cnf` 或 `/etc/mysql/my.cnf`,增加或修改以下参数: ```ini [mysqld] server-id=1 log-bin=mysql-bin binlog-do-db=testdb # 只同步 testdb 这个数据库的数据 expire_logs_days=7 # 设置二进制日志保留时间 innodb_flush_log_at_trx_commit=1 sync_binlog=1 # 提升数据一致性 ``` 保存后重启 MySQL 服务使更改生效: ```bash systemctl restart mysqld ``` ##### 3.2 创建用于同步的账号 登录到 MySQL 并创建一个专门用于主从同步的用户账户: ```sql CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES; ``` 记录下该用户的用户名 (`repl`) 和密码 (`password`),稍后会在 Slave 上使用。 ##### 3.3 获取当前 Binlog 日志位置 执行以下 SQL 查询获取当前的 binlog 文件名及其偏移量: ```sql SHOW MASTER STATUS; ``` 输出类似于: | File | Position | Binlog_Do_DB | |--------------|----------|--------------| | mysql-bin.001| 123 | testdb | 记住这些信息,因为它们将在后续配置中被用到。 --- #### 4. 配置 Slave 节点 (从节点) ##### 4.1 修改 my.cnf 配置文件 同样编辑 `/etc/my.cnf` 文件,在 `[mysqld]` 下新增以下内容: ```ini [mysqld] server-id=2 relay-log=mysql-relay-bin read-only=1 # 将此实例设为只读模式 replicate-do-db=testdb # 同步指定数据库 ``` 完成后重启 MySQL 服务: ```bash systemctl restart mysqld ``` ##### 4.2 配置主从关系 连接至 Slave 节点上的 MySQL 实例,执行以下命令建立主从关联: ```sql CHANGE MASTER TO MASTER_HOST='mysql-master', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.001', -- 替换为主节点查询得到的日志文件名 MASTER_LOG_POS=123; -- 替换为主节点查询得到的位置编号 START SLAVE; ``` 验证主从状态是否正常启动: ```sql SHOW SLAVE STATUS\G ``` 重点关注以下几个字段: - `Slave_IO_Running`: 应显示为 Yes; - `Slave_SQL_Running`: 应显示为 Yes。 如果均为 Yes,则说明主从复制成功开启。 --- #### 5. 测试主从复制功能 在 Master 节点上向目标数据库写入一些测试数据,观察其能否自动同步到 Slave 节点。例如: ```sql USE testdb; CREATE TABLE IF NOT EXISTS users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL ); INSERT INTO users(username) VALUES('test_user'); ``` 随后查看 Slave 节点中的对应表结构及数据是否一致。 --- ### 总结 MySQL 主从复制的核心在于将 Master 执行的操作以二进制日志的形式传递给 Slave,并由后者重新应用相同的变更过程[^4]。上述方法涵盖了完整的部署流程,包括环境初始化、配置调整以及最终的状态检验环节。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值