关于mysql:器篇Mysql-基于GTID的主主备份实践

37次阅读

共计 3936 个字符,预计需要花费 10 分钟才能阅读完成。

一、引言来

此教程简要领导针对 Mysql 数据库的基于 GTID 的双主备份。

二、步骤来

0. 环境筹备

  • 两台 Centos 零碎的服务器, 服务器调配在同一网段,并保障互相网络畅通

    -server-a ip : 192.168.1.220

    -server-b ip : 192.168.1.221

  • 服务器事后装置好 DockerDocker-Compose,pull Mysql:8.0 镜像
  • Navicat for mysql 执行数据库命令

1. 设置 Mysql 配置文件

新建 mysql 配置文件my.cnf,具体配置省去,只阐明主从备份相干配置。

1.1 设置 server-a 的配置文件

与主主备份相干的配置


[mysqld]
#为服务器调配 id,能够自定义,不辨别大小,起标识作用。不同数据库节点调配不同的 id
server_id=1

# 关上 Mysql 日志,日志格局为二进制
log-bin=mysql-bin

# 可选项 Mixed,Statement,Row,默认格局是 Statement,mixed 混合 Satement,ROW 两种模式
binlog_format=mixed

#当启用时,服务器通过只容许执行能够应用 GTID 平安地记录的语句来强制 GTID 一致性。enforce-gtid-consistency=true

#启用基于 GTID 的复制,启用之前必须保障 enforce-gtid-consistency=true
gtid_mode=ON

#该选项让从库写入哪些来自于主库的更新,并把这些更新写入 bin-log 文件,一台服务器即做主库又做从库必须开启
log-slave-updates=true

一些定制化的配置


针对主服务器

疏忽不同步主从的数据库

# 个别设置 sys,performace_schema,infomation_schema,mysql
binlog-ignore-db=<YOUR-DB-NAME>

容许同步的数据库

# 个别设置成备份的生产数据的数据库
binlog-do-db=<YOUR-DB-NAME>

针对从服务器

疏忽不同步主从的数据库

# 个别设置 sys,performace_schema,infomation_schema,mysql
replicate-ignore-db=<YOUR-DB-NAME>

容许同步的数据

# 个别设置成备份的生产数据的数据库
replicate-do-db=<YOUR-DB-NAME>

因为咱们配置的是双主服务器,每台服务器既要作为主又要作为从。所以以上针对主,从服务器的个性化配置在两台数据库都要按具体业务需要进行配置。

另,以上 4 个定制化参数可反复设置,如下图

replicate-ignore-db=sys
replicate-ignore-db=mysql
1.2 设置 server-b 配置

区别于 server-a 的配置,改变以下配置即可, 其余定制化配置按需自定义

#server_id 必须举世无双
server_id=2

2. 编辑 docker-compose.yml

两个服务器配置雷同内容的 docker-compoe.yml 文件

version: '3.7'
services:
  #mysql service
  mysql:
    image: mysql:8.0
    ports:
      - "3306:3306"
    command:  --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time-zone='+8:00'
    restart: always
    volumes:
     #长久化数据库,留神门路
      - ./data/db:/var/lib/mysql
     #替换数据库配置文件,留神门路
      - ./my.conf:/etc/mysql/conf.d/mysql.cnf
    environment:
      MYSQL_ROOT_PASSWORD: <YOUR_PAASWORD>
    container_name: mysql_service

3.docker 开启数据库容器

每个服务器针对数据库的 docker-compose 目录如下(供参考):

-mysql_replicate

docker-compose.yml

my.conf

-data

-db

启动数据库服务

docker-compose up -d

确保数据库服务启动胜利。

4. 配置同步信息并启动同步

4.1 查看两台服务器 Mysql 状态
MySQL [(none)]> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000014 |      81  |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

File 示意以后正在写入的 binlog 文件

Postion 示意以后正在写入的地位

Binlog_Do_DB示意只记录指定数据库的二进制文件

Binlog_Ignore_DB示意不记录指定数据库的二进制文件

Executed_Gtid_Set这是 5.7mysql 库引入了新的表 gtid_executed,会记录以后执行的 GTID

如果未开启 GTID,配置同步信息会用到FilePostion

4.2 创立 Replication 用户

创立针对限定 host 的 Slave 登录用账户和明码,并刷新权限

针对 server-a, 其 ip 为 192.168.8.220

create user 'repl'@'192.168.1.221' identified by 'vo7kphndxlzfr6u3';
grant replication slave on *.* to 'repl'@'192.168.1.221';
flush privileges;

针对 server-b, 其 ip 为 192.168.8.221

create user 'repl'@'192.168.1.220' identified by 'vo7kphndxlzfr6u3';
grant replication slave on *.* to 'repl'@'192.168.1.220';
flush privileges;
4.3 配置同步信息

使数据库实例和 Master 实例关联起来

针对 server-a, 其 ip 为 192.168.8.220

 change master to 
     master_host='192.168.1.221',
     master_port=3306,
     master_user='repl',
     master_password='vo7kphndxlzfr6u3',
 MASTER_AUTO_POSITION=1,
 GET_MASTER_PUBLIC_KEY=1;

针对 server-b, 其 ip 为 192.168.8.221

 change master to 
     master_host='192.168.1.220',
     master_port=3306,
     master_user='repl',
     master_password='vo7kphndxlzfr6u3',
 MASTER_AUTO_POSITION=1,
 GET_MASTER_PUBLIC_KEY=1;

MASTER_AUTO_POSITION主动获取 Master 的地位,就不要去指定 master_log_filemaster_log_pos

GET_MASTER_PUBLIC_KEY很重要,如果不设置此参数,会导致 Slave 开启后,Slave 无奈连贯到 Master。谬误见下图

eror connecting to master 'repl@mysql-master:3306' - retry-time: 60  retries: 3, Error_code: MY-002061
...

这个是因 MySQL 8 默认启用了 caching_sha2_password authentication plugin,通过 mysql 官网文档介绍能够在 CHANGE MASTER TO 增加 GET_MASTER_PUBLIC_KEY=1 参数来解决这个问题。

4.4 启动同步和查看同步状态

在两个数据库实例中启动同步

start slave;

示意启动从库的两个线程:

  1. I/ O 线程,示意线程会连贯近程 Master 的 mysql,并把它的 bin-log 拷贝到本机的中继日志 relay-log 中。
  2. sql 线程,示意该线程会读取本机中继日志中的数据,并把这些数据恢复到本机本人的 mysql 表中。

这样 Master 的数据就会同步到从库的数据库中。

查看同步状态

show slave status;

显示以下状态则失常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

至此,配置同步信息,启动同步实现。批改任意数据库表构造或表数据,会同步更新到另一个数据库中。

三、扩大来

主主备份的设置过程曾经分明了,那么 Mysql 数据库是如何实现备份过程的?如何解决主从备份过程中同步有提早问题呢?主从同步过程中呈现行数据抵触如何解决?先留给同志们思考思考。接下来会有其它文章进行一一论述。

正文完
 0