docker部署mysql主从

 本文在使用docker的方式,在同一台主机,通过不容容器运行MySQL的方式,搭建了一主一从的MySQL主从数据库组。后续将使用consul搭建高可用的MySQL数据库,使用MyCat实现分库分表,读写分离,从而搭建一个稳定的,易于扩展的,高可用的数据库组。

  • 获取msyql镜像

通过docker pull mysql:5.7获取mysql的官方镜像,mysql版本是5.7。

  •  部署master

1. 创建文件master.cnf。server-id取值为1-(2^{32})-1,在同一个主从的MySQL组中,server-id必须是唯一的。

[mysqld]
log-bin=mysql-bin
server-id=1

2. 创建master的docker容器启动脚本,容器名称为master,root密码为123456,设置timezone为Asia/Shanghai,映射配置文件master.cnf,并且将mysql的容器路径/var/lib/mysql映射的主机的/path/to/data路径实现MySQL数据的持久化。

#!/bin/bash
docker run -p 3306:3306 \
--name master \
-v /path/to/master.cnf:/etc/mysql/conf.d/master.cnf:ro \
-v /path/to/data:/var/lib/mysql \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-v /path/to/timezone:/etc/timezone:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

 3. 运行脚本启动master,使用docker exec -it master /bin/bash进入到docker容易。执行命令mysql -u root -p,通过启动时设置的root密码登陆MySQL。可以通过以下语句修改root密码

update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';

 4. 创建用户并授与replication slave权限。

CREATE USER 'dev'@'%.example.com' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'dev'@'%.example.com';

5. 使用show master status查询master的binlog的文件名和position。

SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+
  • 部署slave

1. 创建文件slave.cnf,设置与master不同的server-id。binlog_ingore_*是忽略某个数据库。

[mysqld]
log-bin=mysql-bin
binlog-format=ROW 
server_id=2
binlog_ignore_db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performation_schema
binlog_ignore_db=sys

2. 创建slave的容器启动脚本,与master不同的是配置文件和持久化数据的位置不同。启动slave时通过--link连接到master,使slave能够通过master的主机名访问master。

#!/bin/bash
docker run -p 3306:3306 \
--name slave1 \
--link master \
-v /path/to/slave.cnf:/etc/mysql/conf.d/slave.cnf:ro \
-v /path/to/mysql/data1:/var/lib/mysql \
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:ro \
-v /path/to/timezone:/etc/timezone:ro \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

 3. 配置master的连接信息,是slave能够连接到master。通过docker exec -it slave1 /bin/bash法进入到slave的容器中,登录mysql执行语句

CHANGE MASTER TO
     MASTER_HOST='master',
     MASTER_USER='dev',
     MASTER_PORT=3306,
     MASTER_PASSWORD='password',
     MASTER_LOG_FILE='mysql-bin.000003',
     MASTER_LOG_POS=73;

4. 在slave中执行start slave启动slave线程。

 

至此,两个节点的组成的mysql主从数据库组就搭建完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值