您现在的位置是:亿华云 > 应用开发
MySQL读写分离那些事,用Docker轻轻松松搞定
亿华云2025-10-04 00:43:14【应用开发】3人已围观
简介一个应用系统是否高可用,整个系统的效率是否满足预期,往往受到多方面的制约因素,例如:运行环境,网络环境以及数据的吞吐量等;作为一般的大型应用系统来说,我们想要提升整个系统的效率,我们大多数情况下会从我
一个应用系统是写分否高可用,整个系统的离那效率是否满足预期,往往受到多方面的事用松松制约因素,例如:运行环境,轻轻网络环境以及数据的搞定吞吐量等;作为一般的大型应用系统来说,我们想要提升整个系统的写分效率,我们大多数情况下会从我们的离那后端数据库做优化,从而提高我们整个系统的事用松松数据吞吐量,如果我们后端采用的轻轻是关系型数据,我们可能会想到两种解决方案,搞定一种是写分更换非关系型数据库,这种方案代价比较昂贵,离那它会涉及到数据的事用松松迁移,以及程序代码的轻轻修改;另一种是通过数据库集群的方式,来横向和纵向扩展我们的搞定数据库,这种方案容易实现并且程序代码修改量比较小;
根据MySQL的官方文档介绍,站群服务器MySQL支持读写分离的集群配置,并且MySQL提供两种类型的读写分离数据复制类型;一种是二进制日志文件方式的数据复制,另一种是Global Transaction Identifiers (GTIDs)。
下面我们通过一个小实验来看看MySQL数据基于二进制日志数据复制方式的主从集群是如何实现的。
OS环境:CentOS7
软件环境:Docker(最新版),MySQL:latest镜像
我们通过Docker容器快速的构建两个MySQL数据库服务器
docker pull mysql [root@dev01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest 62a9f311b99c 4 weeks ago 445MB可以看到我们已经拉取到最新的MySQL Docker容器,为了在本地环境中启动两个不同的MySQL Docker容器,我们需要通过修改容器的配置文件的方式来改变MySQL的配置;
首先,我们修改MySQL Master(主数据库)的容器配置文件:
一,创建Master数据库的配置文件
vi master.cnf [mysqld] # master server id server-id = 1 # bin log log_bin = mysql-master-bin server-id,在MySQL集群数据库中,这个参数必须唯一 log_bin,MySQL采用二进制日志文件复制的文件名二,将该配置文件拷贝到MySQL Docker容器中
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql docker cp master.cnf fdb98bbd52b6:/etc/mysql/conf.d三,提交修改后的Docker容器
docker commit -m "add master configure file" fdb98bbd52b6 mysql:master [root@dev01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql master 345465966cb5 3 hours ago 445MB commit -m是源码库修改容器后提交的信息,类似Git提交; fdb98bbd52b6是刚才修改的容器; mysql:master是我们为修改后的容器打上tag标签master接下来我们修改MySQL Slave(从数据库)的容器配置文件
一,创建Slave数据库的配置文件
vi slave.cnf [mysqld] # slave server id server-id = 2 # bin log log_bin = mysql-slave-bin relay_log = mysql-relay-bin log_slave_updates = 1 read_only = 1 server-id为从数据库的ID,该参数在MySQL集群中必须保持唯一性; log_bin如果slave为其它slave的master,必须设置bin_log,在这里我们暂时开启; relay_log配置中继日志 log_slave_updates表示slave将复制事件写进自己的二进制日志(后面会看到它的用处); read_only尽量使用read_only,它防止改变数据(除了特殊的线程);二,将配置文件拷贝到容器中
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql docker cp slave.cnf 8ee82abb2e91:/etc/mysql/conf.d三,提交修改后的Docker容器
docker commit -m "add slave configure file" 8ee82abb2e91 mysql:slave [root@dev01 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql slave 3a53cd39ee45 4 hours ago 445MB到此,所需要的两个MySQL容器已经修改完毕,并且保存在我们本地的容器仓库中,接下来我们开始启动刚才修改的两个容器进行后续的配置
一,启动Master数据库
docker run --name master -e MYSQL_ROOT_PASSWORD=root -d mysql:master --name master是我们为启动的容器名; mysql:master是我们刚才修改后并且提交到本地的亿华云计算Docker镜像 默认数据库root的密码设置为root二,启动Slave数据库
docker run --link master:master --name slave -e MYSQL_ROOT_PASSWORD=root -d mysql:slave 为了master容器与slave容器的网络互通,我们添加了--line选项来连接到我们刚才启动的名为master容器; --name slave是我们为启动的容器名; mysql:slave是我们刚才修改后并且提交到本地的Docker镜像; 默认数据库root的密码设置为root三,进入master容器中通过mysql命令进入数据库
docker exec -it master /bin/bash mysql -u root -proot四,在master数据库中创建用于复制数据的账号,并且给该账号相应的权限
create user repl@% identified by repl-pwd; grant replication slave on *.* to repl@%; flush privileges;五,查看master数据库的状态
mysql> show master status; +-------------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------------+----------+--------------+------------------+-------------------+ | mysql-master-bin.000003 | 2743 | | | | +-------------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)六,进入slave容器中通过mysql命令进入数据库
docker exec -it slave /bin/bash mysql -u root -proot七,配置slave,将master数据库指向刚才配置好的master数据库节点,并且启动slave
change master to master_host=master, master_user=repl, master_password=repl-pwd, master_log_file=mysql-master-bin.000003, master_log_pos=0; start slave;八,查看slave数据库状态
mysql> show slave status\G很赞哦!(6552)
相关文章
- 网站页面结构改版,仅是页面样式发生变化,不会对排名、收录有影响;只有涉及到页面URL改变,才会对网站排名、收录有影响。
- 戴尔科技集团新一代服务器CXL 助力企业提高智能冷却技术
- 一种跳板机的实现思路
- 5G如何影响数据中心以及如何做好准备
- 3、商标域名一经注册,就可以作为域名裁决过程中的主要信息之一。这可以大大增加公司被抢注的相关域名胜诉的机会。
- 部署时间节省 99.7%,SUSE助力Hexagon实现 IT 现代化
- 大量新老项目接入,服务限流如何排除差异快速落地?
- 戴尔科技智能算力平台 为企业科技创新赋能
- 在众多公司中,如果我们必须选择一家可信的公司,那当然是信得过的。
- 记一次利用GrayLog实现采集与备份云服务器Web访问日志的实现过程