mysql数据库双机热备份实现

 更新时间:2026年07月03日 09:46:47   作者:物往fd  
这篇文章主要介绍了mysql数据库双机热备份实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mysql数据库双机热备份

1. 环境准备

  1. 两台纯净的centos6 linux系统
  2. 两台linux虚拟机都安装mysql数据库
  3. 前提条件,两台机器可以ping通

名词解释

  • 主服务器(master):负责日常服务器的增、删、改、查任务,是数据库集群的主力者。
  • 从服务器(slave):负责服务器上热备份数据,若主服务器崩溃或人为不可抗拒的灾难,可暂时替代主服务器继续提供数据。
  • 热备份(hot backup):指系统运行时进行的备份操作,在备份过程中,系统不会停止服务,数据被实时或准实时地复制到备份存储中。
  • 冷备份(cold backup):指系统关闭或不运行时进行的备份操作,在备份过程中,系统服务被停止,数据被复制到备份存储中。成本较低。

2. 主从复制

环境描述

主服务器master:192.168.111.136
从服务器slave:192.168.111.137
MySQL 用户:replicate
MySQL 用户密码:root

两台机器同时操作

可以使用 MobaXterm_CHS 连接虚拟机,便于操作

关闭防火墙

service iptables stop

安装mysql

# 解压mysql安装包,主从服务器mysql版本保持一致
cd /home
tar -xvf MySQL.rpm-bundle.tar
# 安装数据库
rpm -ivh MySQL-*rpm --nodeps --force 

启动mysql,登录mysql

service mysql start
# 首次登录不需要密码,直接enter
mysql -uroot -p
# 授权root并修改密码为root
grant  all privileges on  *.* to 'root'@'localhost' identified by 'root';
# 仅修改密码:alter user 'root'@'localhost' indentified by 'root';
flush privileges;

改成对应的静态ip

cd /etc/sysconfig/network-scripts/
cat ifcfg-eth0
# 如下内容
DEVICE=eth0
HWADDR=00:0C:29:6D:7A:FD
TYPE=Ethernet
UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=dhcp
vi ifcfg-eth0
# 改成
DEVICE=eth0
HWADDR=00:0C:29:6D:7A:FD
TYPE=Ethernet
UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.111.137
NETMASK=255.255.255.0
GATEWAY=192.168.111.1
DNS1=8.8.8.8
DNS2=8.8.4.4
# 重启网络
sudo systemctl restart network

主服务器master配置

进入192.168.111.136,进入mysql,创建同步用户replicate,授权复制(replication)从属(slave)权限,并指定从服务器ip以及密码为root

# 主服务器创建用户
grant replication slave on *.* to  'replicate'@'192.168.111.137' identified by  'root';
flush privileges;
# 在从服务器192.168.111.137 上测试
mysql -h192.168.111.136 -ureplicate -proot;

修改主服务器 mysql 配置文件

vi /etc/my.cnf
# 添加如下内容
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql

重启mysql服务

service mysql restart

查看主服务器状态

# 进入mysql服务
mysql -uroot -proot
# 刷新表的读取锁
flush tables with read lock;
# 查看主服务器的状态
show master status\G;
# 解锁表
unlock tables;

注意记录:File(日志编号)和 Position(位置)两个参数,用于从服务器配置主从关系时用到。

从服务器slave配置

进入192.168.111.137,修改从服务器 mysql 配置文件

vi /etc/my.cnf
# 添加如下内容
[mysqld]
server-id=2
log-bin=mysql-bin
replicate-do-db=test
replicate-ignore-db = mysql,information_schema,performance_schema

重启mysql服务

service mysql restart

进入mysql,用change master指定同步位置

# 先停止slave服务线程
stop slave;
# 指定同步位置
change master to master_host='192.168.111.136',
master_user='replicate',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=107;
# master_host 主服务ip
# master_user 同步用户
# master_log_file File日志编号
# master_log_pos Position位置
# 刷新权限
flush privileges;

查看从服务器状态

show slave status\G;
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
# 表示设置成功

sql语言不区分大小写。

测试同步

在主服务器中,进入mysql,创建表,插入数据

use test;
create table tb_mobile(mobile varchar(20), time timestamp default now())
insert into tb_mobile (mobile) values('13456789898');

在从服务器中,进入mysql,查看是否同步成功

use test;
select * from tb_mobile;

现在从服务器可以同步主服务器,但是主服务器无法同步从服务器的操作,接下来,进行主主复制配置。
即主从为单向复制,主主为双向复制。

3. 主主复制

环境描述:

和主从复制时一致,可以完成主从复制后,进行主主复制,二者不影响,不过以防万一,可以先打个快照。

服务器 A:192.168.111.136
服务器 B:192.168.111.137
MySQL 用户:replicate
MySQL 用户密码:root

服务器 A 配置(192.168.111.136)

编辑 MySQL 配置文件

vi /etc/my.cnf
# 如下配置
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql,information_schema,performance_schema
# 添加以下配置以启用复制过滤器
replicate-do-db=test
replicate-ignore-db=mysql,information_schema,performance_schema

创建复制用户:

create user 'replicate'@'%' identified by 'root';
grant replication slave on *.* to 'replicate'@'%';
flush privileges;
# %代表任何主机

记录二进制日志文件名和位置:

show master status;

服务器 B 配置(192.168.111.137)

编辑 MySQL 配置文件:

vi /etc/my.cnf
# 如下配置
[mysqld]
server-id=2
log-bin=mysql-bin
binlog-do-db=test
binlog-ignore-db=mysql,information_schema,performance_schema
# 添加以下配置以启用复制过滤器
replicate-do-db=test
replicate-ignore-db=mysql,information_schema,performance_schema

创建复制用户:

create user 'replicate'@'%' identified by 'root';
grant replication slave on *.* to 'replicate'@'%';
flush privileges;

记录二进制日志文件名和位置:

show master status;

配置双向复制

在服务器 A(192.168.111.136)上设置从服务器(指向服务器 B)

从服务器 B 获取二进制日志文件名和位置,然后在服务器 A 上执行以下命令:

change master to
master_host='192.168.111.137',
master_user='replicate',
master_password='root',
master_log_file='mysql-bin.000001',  -- 使用服务器 b 上实际的日志文件名
master_log_pos=107;  -- 使用服务器 b 上实际的日志位置

start slave;

在服务器 B(192.168.111.137)上设置从服务器(指向服务器 A)

从服务器 A 获取二进制日志文件名和位置,然后在服务器 B 上执行以下命令:

change master to
master_host='192.168.111.136',
master_user='replicate',
master_password='root',
master_log_file='mysql-bin.000001',  -- 使用服务器 a 上实际的日志文件名
master_log_pos=107;  -- 使用服务器 a 上实际的日志位置

start slave;

验证复制状态

在服务器 A 和 B 上验证复制状态

show slave status\G;

检查 Slave_IO_RunningSlave_SQL_Running 是否均为 Yes,以及是否存在任何错误。

分别在服务器A和服务器B中,插入输入,查看数据库是否同步

use test;
insert into tb_mobile (mobile) values('13456789898');
select * from tb_mobile;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 一文带你彻底了解MySQL事务机制

    一文带你彻底了解MySQL事务机制

    一个事情由n个单元组成,这n个单元在执行过程中,要么同时成功,要么同时失败,这就把n个单元放在了一个事务之中,这篇文章主要给大家详细介绍MySQL的事务机制,感兴趣的同学欢迎阅读本文
    2023-06-06
  • MySQL 随机函数获取数据速度和效率分析

    MySQL 随机函数获取数据速度和效率分析

    最近做项目,需要做一个从mysql数据库中随机取几条数据出来。总所周知,order by rand 会死人的。。因为本人对大数据量方面的只是了解的很少,无解,去找百度老师。。搜索结果千篇一律。特发到这里来,供大家学习,需要的朋友可以参考下
    2016-11-11
  • MySQL中对于索引的基本增删查改操作总结

    MySQL中对于索引的基本增删查改操作总结

    这篇文章主要介绍了MySQL中对于索引的基本增删查改操作总结,索引可以提高MySQL的检索速度,需要的朋友可以参考下
    2016-01-01
  • mysql update case 更新字段值不固定的操作

    mysql update case 更新字段值不固定的操作

    这篇文章主要介绍了mysql update case 更新字段值不固定的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • 如何查询MySQL中某个表的索引信息

    如何查询MySQL中某个表的索引信息

    MySQL是一种关系型数据库管理系统,索引是数据库中非常重要的组成部分,可以帮助提高查询效率,这篇文章主要给大家介绍了关于如何查询MySQL中某个表的索引信息,需要的朋友可以参考下
    2024-08-08
  • MySql8 WITH RECURSIVE递归查询父子集的方法

    MySql8 WITH RECURSIVE递归查询父子集的方法

    这篇文章主要介绍了MySql8 WITH RECURSIVE递归查询父子集的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • mysql插入带emoji表情的数据报错问题

    mysql插入带emoji表情的数据报错问题

    在处理MySQL数据库插入表情时出现错误,主要可能是由三个因素引起的:1、数据库版本号是否大于5.5.3;2、数据库表及字段的字符集是否为utf8mb4;3、项目中MySQL驱动的版本是否大于5.1.13,本文详细讲解了如何针对这三个关键点进行排查和解决
    2024-11-11
  • MySQL常用分库分表方案汇总

    MySQL常用分库分表方案汇总

    本文主要介绍了MySQL常用分库分表方案汇总,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • MySQL to_date()日期转换的用法及注意事项

    MySQL to_date()日期转换的用法及注意事项

    这篇文章主要介绍了MySQL to_date()日期转换的用法及注意事项,TO_DATE()函数在不同数据库系统中用于将字符串转换为日期格式,其语法和参数可能有所不同,需要的朋友可以参考下
    2025-01-01
  • MySQL中列如何以逗号分隔转成多行

    MySQL中列如何以逗号分隔转成多行

    这篇文章主要介绍了MySQL中列如何以逗号分隔转成多行问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论