mysql|docker安装mysql集群


目录

一.前言
二.主从集群搭建
2.1.master 主服务器的搭建
【mysql|docker安装mysql集群】2.2 slave服务器准备


一.前言 主从复制的流程:
mysql|docker安装mysql集群
文章图片

1. 主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
2. 从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
3. 从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。
小结: 借助于docker的容器化技术,我们只需要创建两个MySQL容器,并且占用主机的两个端口即可,对主机没有其他额外的影响。这种方式非常的轻量,而且也容易复制。本文则主要讲解如何通过docker来搭建MySQL集群。
二.主从集群搭建 2.1.master 主服务器的搭建
1.启动容器
docker run --name mysql-master --privileged=true -v /home/mysql/master-data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a123456. -d xiaochunping/mysql-master
在执行上述命令之后,docker首先会检测本地有没有目标镜像,即xiaochunping/mysql-master(这个镜像内部的cnf是配好的),如果没有,则会下载该镜像,然后根据配置的参数运行该镜像。
上述命令中各个参数的含义如下:
--name指定运行之后的容器的名称为mysql-master;
? -- privileged指定了当前容器是否真正的具有root权限,所谓的root权限是指具有宿主机的root权限,而不仅仅只是在容器内部有root权限;
-v 指定了容器中指定目录挂载到宿主机上的某个目录,这样做的目的在于防止容器中配置的数据丢失,因为docker容器在重启之后是不会保留前一次在其内部运行的相关数据的; ?
-p 表示宿主机上的某个端口映射到docker容器内的某个端口,这里也就是将宿主机的3306端口映射到容器内部的3306端口; ?
-e 表示指定当前容器运行的环境变量,该变量一般在容器内部程序的配置文件中使用,而在外部运行容器指定该参数。这里的MYSQL_ROOT_PASSWORD表示容器内部的MySQL的启动密码; ?
-d 参数指定了当前容器是在后台运行。
docker ps命令即可看到这个运行的容器
[root@zyy ~]# docker ps
CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTSNAMES
746e43a06fbfxiaochunping/mysql-master"docker-entrypoint.s…"15 minutes agoUp 15 minutes0.0.0.0:3306->3306/tcp, :::3306->3306/tcpmysql-master ?
2.进入该容器:
docker exec -it 746e43a06fbf /bin/bash ?
# 通过容器id方式,这里的id就是上面docker ps中展示的id
3.进入容器后,我们需要连接其MySQL服务:
mysql -uroot -pa123456.
# 这里的密码就是最开始创建容器时指定的密码
4.创建一个专门用来复制binlog的账号,并且赋予该账号复制权限,其命令如下:
grant replication slave on *.* to 'test'@'%' identified by '123456'; flush privileges;
#这里的grant replication slave是一个命令格式,表示赋予后面的账户以复制的权限,这样slave节点就能够获取到master节点对数据的更新。上述命令中创建的账户的用户名为test,密码为123456
5.查看master节点的binlog状态:
mysql> show master status; #这里需要记住这个File和Position属性的值,因为下面在配置slave的时候需要用到
+------------------+----------+--------------+------------------+-------------------+
| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |154 ||||
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.2 slave服务器准备
1.启动容器
docker run --name mysql-slave --privileged=true -v /home/mysql/slave1-data:/var/lib/mysql -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=a123456. -d xiaochunping/mysql-slave?
2.进入容器
docker exec -it mysql-slave /bin/bash ?
3.输入用户名密码
mysql -uroot -pa123456.
4.连接连接主服务器信息
change master to master_host='master', master_user='test', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=589, master_connect_retry=30;
5.开启主从复制
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
6.查看从服务器的连接状态:
show slave status\G;
#这里只要看到两个参数Slave_IO_Running和Slave_SQL_Running都为true,则表示复制是正常进行的,到这里我们的主从结构也就搭建完成了。

    推荐阅读