【Docker实战】构建数据库解决方案,基于华为云Flexus X实例容器化MySQL主从同步架构

举报
wzsのcloud 发表于 2024/10/29 22:48:24 2024/10/29
【摘要】 华为云Flexus X实例,融合柔性算力与智能调度,为数据库解决方案带来全新突破。采用容器化MySQL主从同步架构,实现数据高效备份与读写分离,保障业务连续性与数据安全。

前言

华为云Flexus X实例,融合柔性算力与智能调度,为数据库解决方案带来全新突破。采用容器化MySQL主从同步架构,实现数据高效备份与读写分离,保障业务连续性与数据安全。Flexus X实例特惠开启,助力企业轻松构建高性能数据库系统。专业团队技术支持,确保部署无忧,运维高效。选择华为云Flexus X实例,拥抱数据库未来,让数据成为企业增长的强劲动力。

链接直达:华为云Flexus云服务器X实例

image.png

MySQL主从部署介绍

MySQL主从部署是一种数据库架构配置,主要用于提高数据库系统的可用性、可靠性和性能。在这种架构中,有一个主数据库(Master)负责处理所有的写操作(如INSERT、UPDATE、DELETE等),并将这些操作的变更记录到二进制日志(binlog)中。同时,有一个或多个从数据库(Slave)从主数据库同步这些变更,以实现数据的实时备份和读写分离

image.png

环境规划

操作系统 mysql docker 连接方式
Huawei Cloud EulerOS 2.0 mysql5.7 27.1.1 本地shell

mysql主从部署流程

需要了解:

mysql主节点部署

[root@flexusx-251f ~]# docker pull mysql:5.7 

# 提前创建目录,如果创建,创建容器指定目录会自动创建
[root@flexusx-251f ~]# mkdir -p /mysql-master/log
[root@flexusx-251f ~]# mkdir -p /mysql-master/data
[root@flexusx-251f ~]# mkdir -p /mysql-master/conf

[root@flexusx-251f ~]# docker run -itd -p 3666:3306 \
--name mysql-master \
-v /mysql-master/log:/var/log/mysql \
-v /mysql-master/data:/var/lib/mysql \
-v /mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=password \
--privileged=true \
mysql:5.7

[root@flexusx-251f ~]# docker ps | grep mysql-master
a806b1522ff0   mysql:5.7                                                                  "docker-entrypoint.s…"   13 seconds ago   Up 13 seconds           33060/tcp, 0.0.0.0:3666->3306/tcp, :::3666->3306/tcp                                             mysql-master

mysql主节点配置

[root@flexusx-251f ~]# vim /mysql-master/conf/my.cnf
[root@flexusx-251f ~]# cat /mysql-master/conf/my.cnf 
[mysqld]
## 设置server id,同一局域网中需要唯一
server_id=101
##指 定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mall-mysql-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## 字符集
character-set-server=utf8

# 重启容器
[root@flexusx-251f ~]# docker restart mysql-master

mysql从节点部署

[root@flexusx-251f ~]# mkdir -p /mysql-slave/log
[root@flexusx-251f ~]# mkdir -p /mysql-slave/data
[root@flexusx-251f ~]# mkdir -p /mysql-slave/conf


[root@flexusx-251f ~]# docker run -itd -p 3667:3306 \
--name mysql-slave \
-v /mysql-slave/log:/var/log/mysql \
-v /mysql-slave/data:/var/lib/mysql \
-v /mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=password \
--privileged=true \
--link mysql-master:mysql-master \   #从节点连接主节点 映射host别名
mysql:5.7

[root@flexusx-251f ~]# docker ps | grep mysql-s
01db4abd57b0   mysql:5.7                                                                  "docker-entrypoint.s…"   19 seconds ago   Up 18 seconds           33060/tcp, 0.0.0.0:3667->3306/tcp, :::3667->3306/tcp                                             mysql-slave

mysql从节点配置

[root@flexusx-251f conf]# vim /mysql-slave/conf/my.cnf
[root@flexusx-251f conf]# cat /mysql-slave/conf/my.cnf
[mysqld]
## 设置server id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
## 二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## relay log配置中继日志
relay_log=mall-mysql-relay-bin
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
## slave设置为只读(具有super权限的用户除外)
read_only=1
## 字符集
character-set-server=utf8

# 重启容器
[root@flexusx-251f ~]# docker restart mysql-slave

主从节点配置

配置安全组

放行端口:3666,3667

image.png

master节点配置

创建主数据库同步用户,并授权

  • slave on *.* to 'backup'@'%' 授权给所有库,所有主机,可指定其中需要同步的数据库
  • identified by 'password' 同步认证密码
  • flush privileges 刷新授权表
[root@flexusx-251f ~]# mysql -uroot -ppassword -h 123.249.27.118 -P 3666

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%' ;
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

查看主数据库同步状态

mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File                  | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000001 |      761 |              | mysql            |                   |
+-----------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

mysql> show master status\G
*************************** 1. row ***************************
             File: mall-mysql-bin.000001
         Position: 761
     Binlog_Do_DB:
 Binlog_Ignore_DB: mysql
Executed_Gtid_Set:
1 row in set (0.00 sec)

从数据库启动同步,master_log_pos分别对应上一步获取到的File,Position

[root@flexusx-251f ~]# mysql -uroot -ppassword -h 123.249.27.118 -P 3667

mysql> change master to 
master_host='123.249.27.118', 
master_user='slave', 
master_password='123456', 
master_port=3666,
master_log_file='mall-mysql-bin.000001',
master_log_pos=761, 
master_connect_retry=30;
 
mysql> start slave;

查看从数据库同步状态,Slave_IO_Running,Slave_SQL_Running均为yes表示成功

mysql> show slave  status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 123.249.27.118
                  Master_User: slave
                  Master_Port: 3666
                Connect_Retry: 30
              Master_Log_File: mall-mysql-bin.000001
          Read_Master_Log_Pos: 761
               Relay_Log_File: mall-mysql-relay-bin.000002
                Relay_Log_Pos: 325
        Relay_Master_Log_File: mall-mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 761
              Relay_Log_Space: 537
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 101
                  Master_UUID: 1beab0f3-70ed-11ef-b5ba-0242ac110008
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

验证mysql集群

在master节点上创建数据库,验证slave节点是否同步

在主节点创建数据库

[root@flexusx-251f ~]# mysql -uroot -ppassword -h 123.249.27.118 -P 3666

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

在从节点查看是否进行同步

[root@flexusx-251f ~]# mysql -uroot -ppassword -h 123.249.27.118 -P 3667
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)

同步成功,部署完成

体验和感受

在数据驱动的时代,构建高效、可靠的数据库架构是企业稳健前行的关键。华为云Flexus X实例,以其卓越的柔性算力、智能调度及加速技术,携手容器化MySQL主从同步架构,为企业打造了一站式的数据库解决方案。华为云Flexus X实例,作为华为云“柔性算力”理念的集大成者,能够根据业务需求动态调整资源配比,确保MySQL数据库在高并发、大数据量场景下依然保持卓越性能。通过容器化部署,MySQL主从同步架构得以灵活构建,实现数据的实时备份与读写分离,既提升了系统可用性,又增强了数据安全性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。