【Docker实战】构建数据库解决方案,基于华为云Flexus X实例容器化MySQL主从同步架构
前言
华为云Flexus X实例
,融合柔性算力与智能调度,为数据库解决方案带来全新突破。采用容器化MySQL主从同步架构,实现数据高效备份与读写分离,保障业务连续性与数据安全。Flexus X实例特惠开启,助力企业轻松构建高性能数据库系统。专业团队技术支持,确保部署无忧,运维高效。选择华为云Flexus X实例
,拥抱数据库未来,让数据成为企业增长的强劲动力。链接直达:华为云Flexus云服务器X实例
MySQL主从部署介绍
MySQL
主从部署是一种数据库架构配置,主要用于提高数据库系统的可用性、可靠性和性能。在这种架构中,有一个主数据库(Master)
负责处理所有的写操作(如INSERT、UPDATE、DELETE等),并将这些操作的变更记录到二进制日志(binlog)中。同时,有一个或多个从数据库(Slave)
从主数据库同步这些变更,以实现数据的实时备份和读写分离。
环境规划
操作系统 | mysql | docker | 连接方式 |
---|---|---|---|
Huawei Cloud EulerOS 2.0 | mysql5.7 | 27.1.1 | 本地shell |
mysql主从部署流程
需要了解:
- 采用
docker
容器化部署MySQL主从端
,实现一主一从数据同步等功能,以实现数据的实时备份和读写分离。- 详细购买配置实例可参考文章: 快速部署华为云Flexus X实例,开启您的云端之旅
- 部署docker服务请参考文章:华为FlexusX与Docker+Nginx的高效整合之路
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
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主从同步架构得以灵活构建,实现数据的实时备份与读写分离,既提升了系统可用性,又增强了数据安全性。
- 点赞
- 收藏
- 关注作者
评论(0)