赞
踩
双机热备份是一种重要的数据保护和系统可靠性技术,它通过在两台服务器之间实现互为备份的方式,确保在系统出现故障时,服务能够继续运行而不会中断。这种技术主要应用于对系统连续工作性和实时性要求较高的场景,如数据中心、网络服务等,以保障系统的高可靠性和数据的安全性
首先我们需要在服务器A跟服务器B上面分别安装两个MySQL数据库
下面是安装MySQL数据库的步骤
检查liunx中是否有自带数据库Mariadb,rpm -qa | grep -i mariadb
如有yum --setopt=tsflags=noscripts remove MariaDB-client.x86_64卸载
1).使用lsblk -l命令查看Linux服务器中磁盘挂载情况,将数据库安装在磁盘空间较大的文件夹。
2).下载数据库安装包,使用文件传输工具将安装包传入要安装文件夹中。
3).使用命令tar axvf mysql-8.0.15-1.el7.x86_64.rpm-bundle.tar解压安装包。(注:红色字体为安装包名称)
4).使用命令cd data切换到安装包目录下,使用rpm命令安装解压后的软件包。(注:红色字体为文件夹名称/下载包名称,
rpm -ivh mysql-community-common-8.0.15-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.15-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.15-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.15-1.el7.x86_64.rpm
按照此顺序进行安装,否则报错,报错为缺少依赖文件)如果不行,通过 --force --nodeps 命令不检查依赖强制安装,--nodeps就是安装时不检查依赖关系,--force就是强制安装。
如rpm -ivh mysql-community-devel-8.0.15-1.el7.x86_64.rpm --force --nodeps)
5).使用systemctl start mysqld命令启动MySQL数据库 mysqld.service
6).使用systemctl enable mysqld命令设置MySQL开机自启
7).使用systemctl stop firewalld命令关闭防火墙
打开 etc/my.cnf文件 添加lower_case_table_names=1 数据库大小写敏感
8).使用cat /var/log/mysqld.log | grep password命令查看数据库密码。
(grep 'temporary password' /var/log/mysqld.log) 两种方式都可以查看到临时密码。
查看mysql服务状态:service mysqld status
9).以root用户登陆数据库,命令为mysql -u root -p xxxx。(注:p为密码)
10).使用命令alter user root@localhost identified by 'root@你的密码';
命令来修改密码。
set password for root@localhost=password('你的密码'); 红色字符全要输入
两种方式都可以修改密码。
11).创建数据库服务账号,数据库服务账号用作后面其他服务连接数据库时使用:
create user '你的账户'@'%' identified with mysql_native_password by '你的密码';
12).给服务账号授权:
grant all privileges on *.* to '你的账户'@'%' with grant option;
flush privileges; 刷新权限
双机热备特指基于高可用系统中的两台服务器的热备(或高可用),双机高可用按工作中的切换方式分为:主-备方式(Active-Standby方式)和双主机方式(Active-Active方式)。 主-备方式即指的是一台服务器处于某种业务的激活状态(即Active状态),另一台服务器处于该业务的备用状态(即Standby状态)。 而双主机方式即指两种不同业务分别在两台服务器上互为主备状态(即Active-Standby和Standby-Active状态)。
双机热备就是使用MySQL提供的一种主从备份机制实现。所谓双机热备其实是一个复制的过程,复制过程中一个服务器充当主服务器,一个或多个服务器充当从服务。 这个复制的过程实质上是从服务器复制主服务器上MySQL的二进制日志(bin-log),并在从服务器上还原主服务器上的sql语句操作,这样只要两个数据库的初态是一样的,就能一直同步。
双机热备的实现需要MySQL的版本高于 3.2 。另外由于这种备份是基于MySQL二进制日志实现,所以主从服务器上的MySQL版本最好能够一样,至少从服务器的MySQL版本不可以低于主服务器的数据库版本。 因为MySQL不同的版本之间二进制日志可能不一样。 当然这种复制和重复都是MySQL自动实现的,我们只需要配置即可。
1.保证A服务器和B服务器能够ping通(使用ping命令在A服务器上ping B服务器的地址,保证能够ping通)
2.分别为A和B安装相同版本的mysql(输入mysql -V或mysql --version,即可显示当前安装的MySQL版本信息)
3.MySQL的版本要高于3.2(输入mysql -V或mysql --version,即可显示当前安装的MySQL版本信息)
配置之前请在两台服务器上安装好MySQL,MySQL安装参照《MySQL安装步骤》
- #主服务器A配置
- 1).进入mysql数据库,在A上面创建专门用于备份的用户。其中rhy是用户名,192.168.1.4是B(从服务器)的ip地址,密码为’rhy@123 ’;这个等会在B(从服务器)上要用;
- mysql> grant replication slave on *.* to 'rhy'@'192.168.1.4' identified by 'rhy@123'; (高版本MySQL不支持该语法,需要将该命令拆分成两个命令执行,首先创建用户然后再给该用户赋权)
- 2).创建数据库 'backup' 注意:A、B都要手动创建相同名称的数据库
- mysql> create database backup;
- 3).开启 A 的 binarylog
- vim /etc/my.cnf
- 进入my.cnf配置文件
- 进行配置文件修改
- bind-address=192.168.1.3 //设定为A(主服务器)的IP
- server-id =1 //表示A的id
- log_bin = mysql-bin.log //binlog日志文件, 也可以指定自定义路径 例: /data/mysql/mysql-bin.log
- binlog-do-db =backup //用来表示只把指定的数据库的改动,记录到binary日志中,如果有多个数据库可以用‘,’分割 例如: binlog-do-db =backup,db1,db2,...dbn
- auto-increment-increment = 10 //假设将来可能需要10台服务器做备份就设置为10,如果100台就设置为100
- auto-increment-offset = 1 //表示这台服务器的序号,从1开始,不超过auto-increment-increment设定的值
- 4).保存配置后,重启MySQL服务(必须要重启mysql!!!!!)
- [root@hadoop01 mysql_softs]# service mysqld restart
- 5).获取主服务器状态和同步状态
- mysql> use backup; //进入到指定需要热备的数据库meiya
- mysql> FLUSH TABLES WITH READ LOCK; //锁定meiya数据库
- 6).退出mysql,导出backup数据库(可在navicat中操作)
- [root@hadoop01 mysql_softs]# mysqldump -uroot -proot backup > backup.sql
- 7).重新登录mysql,查看A服务器的binary日志位置
- mysql> show master status\G
- *************************** 1. row ***************************
- File: mysql-bin.000001
- Position: 343
- #在主从复制中,主库记录了每个事务的binlg文件名和位置(Position),从库通过读取主库的binlog文件来实现数据同步,主库的Position总变表示当前主库binlog文件的位置,
- #可以用来确定主库和从库之间的数据同步状态。
- #binlog文件名和文件中的偏移量,例如,一个Positionn可能表示为 mysql-bin.00001:1234,其中 mysqlbin.000001 是binlog文件名1234 是文件中的偏移量。
- #主库执行个事务时时会将该事务的binlog写入当前的binlog文件中,并更新Position为当前的文件名和偏移量
- #当主库切换到一个新的binlog文件时,会将Position更新为新的文件名和偏移量
-
- Binlog_Do_DB: backup
- Binlog_Ignore_DB:
- Executed_Gtid_Set:
- 1 row in set (0.00 sec)
- -----------------------------------------------------------------------
- !!!记住File和Position对应的值,接下来在设置B(从服务器)的时候需要用到。
- 8). 解除锁定
- mysql> use backup ;
- mysql> unlock tables ;
- #从服务器B配置
- 9).设置从服务器的文件配置
- vim /etc/my.cnf
- server-id = 2 //表示B的id,必须保证每个服务器不一样,防止进入死循环.
- binlog_format = mixed //binlog的复制模式有三种,statement(基于sql语句的复制)/row(基于行的复制)/mixed(混合模式复制)
- log_bin = mysql-bin.log //binlog日志文件, 也可以指定自定义路径 例: /data/mysql/mysql-bin.log
- replicate-do-db = backup //指定需要复制的数据库,如果有多个数据库可以用‘,’分割 例如: binlog-do-db =backup,db1,db2,...dbn
- relay_log = mysql-relay-bin //中继日志的名字
- log-slave-updates = ON //中继日志执行之后,这些变化是否需要计入自己的binarylog,双主互相备份,因此要打开.
- expire_logs_days = 10 //binlog过期清理时间
- max_binlog_size = 100M //binlog每个日志文件大小
- -----
- 保存配置后,重启MySQL服务(必须要重启mysql!!!!!)
- [root@hadoop02 mysql_softs]# service mysqld restart
- 10). 导入数据库,开始同步(将刚才A导出的数据库文件 backup.sql 传到B服务上)
- [root@hadoop02 ~]# mysql -uroot -proot backup < backup.sql // ‘ backup '待导入的数据库名称,A导出的数据库文件 ‘backup.sql’
- 11).登录mysql
- mysql> CHANGE MASTER TO
- -> MASTER_HOST='192.168.1.3', // 此处是A主服务器的IP
- -> MASTER_USER='rhy', // 刚上面A主服务器mysql创建的用户名
- -> MASTER_PASSWORD='rhy@123', // 刚上面A主服务器mysql创建的rhy用户对应的密码
- -> MASTER_LOG_FILE='mysql-bin.000001', //a服务器的值
- -> MASTER_LOG_POS=343; //a服务器的值
-
- Query OK, 0 rows affected (0.00 sec)
- 12).重启MySQL服务(必须要重启mysql!!!!!)
- [root@hadoop02 mysql_softs]# service mysqld restart
-
- 13).重新登录mysql,查看slave线程是否开启
- mysql> show slave status\G
- ......
- Slave_IO_Running: Yes // yes状态代表成功启动
- Slave_SQL_Running: Yes // yes状态代表成功启动
- ......
- [如果其中一个是No,那就说明不成功,需要查看mysql的错误日志...有时候密码填错了,有时候防火墙的3306没有打开,ip地址不对等等..都会导致失败。
- 重启两个进程
- # 到这里就全部配置完成了!
本文介绍了MySQL双机热备份的方法,可以作为参考
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。