mysql双机热备配置

一:概念

所谓的双机热备就是保证两个数据库的状态同步。其中一个数据库的操作会自动同步到另外一个数据库中去,保证两个数据库的数据一致。

二:作用

  • 容灾切换,当一个数据库服务器宕机可以将连接切换到另一个数据库。
  • 负载均衡,做读写分离,数据库的读和写分摊到不同的数据库当中,减轻单个数据库服务器的压力

三:原理

大概介绍一下数据库是如何实现双机热备的。

首先先说说主从同步概念,就是数据库读操作都放在主数据库上,一旦数据有变化,则从数据库将主数据库的数据变化同步过来,保证从数据库的数据与主数据库的数据一致。

看下图

mysql双机热备配置_第1张图片

主数据库开启binlog记录数据库的数据变化情况,从数据库开启一条I/O thread不断的去读取主树据库的binlog,然后交由另一条SQL thread去执行相应的sql,将数据变化同步过来。

因此主从同步要配置的内容就是:

  1. 开启主数据库的binlog。
  2. 创建一个用于同步数据的帐号,这个帐号有同步数据 (REPLICATION SLAVE) 的权限。
  3. 将主数据库的binlog位置和读取偏移量以及有读取binlog权限的帐号配置给从数据库。
  4. 开启从数据库的同步进程。

以上四步完成了主从同步配置,而双机互备就是两台已经做主从同步的数据库角色调换再做一次主从同步即可。

四:配置实现

新建两个mysql容器

主服务器 mysqltest1

docker run --name mysqltest1 -v /data/test1/my.cnf:/etc/mysql/my.cnf -v /data/test1/mysql/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d 192.168.168.98:5000/mysql

从服务器 mysqltest2

docker run --name mysqltest2 -v /data/test2/my.cnf:/etc/mysql/my.cnf -v /data/test2/mysql/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 -d 192.168.168.98:5000/mysql

主服务器 mysqltest1 开启binlog。在配置文件中添加如下配置。

[mysqld]
server-id = 1
log_bin = /var/lib/mysql/mysql-bin.log

主服务器 mysqltest1 上创建一个专门用于主从同步的帐号添加同步数据的权限。

Create user 'rep'@'%' identified by '123456' require ssl;
grant replication slave on *.* to 'rep'@'%' identified by '123456';
flush privileges;

查看主服务器 mysqltest1 的binlog位置,后面配置从服务器要用到。

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      840 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

登录从服务器 mysqltest2 配置同步参数。

change master to master_host="10.18.139.81", master_port=3307, master_user="rep", master_password="123456", master_log_file="mysql-bin.000004", master_log_pos=840;

各项参数解释如下

change master to
	master_host="10.18.139.81:3307",     ---->主服务器的地址
	master_user="rep",          ---->主服务器的帐号,用刚刚创建用于同步的帐号
	master_password="123456",   ---->主服务器的帐号对应的密码
	master_log_file="mysql-bin.000004", ----->主服务器中通过show master获取的binlog文件
	master_log_pos="840";             ----->主服务器中通过show master获取的log文件位置

最后,启动从服务器 mysqltest2的同步进程。

start slave;  

检查进程启动的状态。

show slave status \G

查看这两项均为Yes,则启动成功。

 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

以上完成主从备份,也就是从服务器可以备份主服务器的数据。

接下来将两台服务器的角色调换一下,mysqltest2 作为主服务器,mysqltest1作为从服务器重新配置一遍,即可完成两个数据库相互备份。

mysqltest2开启binlog,在my.cnf中添加如下配置。

 log_bin = /var/lib/mysql/mysql-bin.log 

mysqltest2中创建用于备份数据的账户。

 Create user 'rep'@'%' identified by '123456';
 grant replication slave on *.* to 'rep'@'%' identified by '123456';
 flush privileges;  

查看 mysqltest2 的binlog位置。

mysql> show master status;
 +------------------+----------+--------------+------------------+-------------------+
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +------------------+----------+--------------+------------------+-------------------+
 | mysql-bin.000004 |      824 |              |                  |                   |
 +------------------+----------+--------------+------------------+-------------------+  

在mysqltest1中添加同步的相关配置。

change master to master_host="10.18.139.81", master_port=3308, master_user="rep", master_password="123456", master_log_file="mysql-bin.000004", master_log_pos=824; 

启动主从同步进程。

start slave; 

至此,主从热备的配置完成。

你可能感兴趣的:(数据库)