Docker搭建Mysql集群

文章目录

    • 前言
    • 搭建主服务器
    • 搭建从服务器
      • slave1服务器
      • slave2服务器
    • 查询状态

前言

主从复制的流程:

在这里插入图片描述

1. 主服务器上面的任何修改都会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log 里面。
2. 从服务器上面也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主服务器上面请求读取二进
制日志,然后把读取到的二进制日志写到本地的一个Realy log(中继日志)里面。
3. 从服务器上面同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),如果发现有更新立即把更新的内容在本机的数据库上面执行一遍。

准备镜像

[root@localhost ~]# docker pull mysql:5.7
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
mysql        5.7       f8fcde8b9ae2   3 days ago   449MB

搭建主服务器

  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 mysql:5.7
	--privileged指定了当前容器是否真正的具有root权限,所谓的root权限是指具有宿主机的root权限,而不仅仅只是在容器内部有root权限;
	-v指定了容器中指定目录挂载到宿主机上的某个目录,这样做的目的在于防止容器中配置的数据丢失,因为docker容器在重启之后是不会保留前一次在其内部运行的相关数据的;
	-p表示宿主机上的某个端口映射到docker容器内的某个端口,这里也就是将宿主机的3306端口映射到容器内部的3306端口
	-e表示指定当前容器运行的环境变量,该变量一般在容器内部程序的配置文件中使用,而在外部运行容器指定该参数。这里的MYSQL_ROOT_PASSWORD表示容器内部的MySQL的启动密码;
  1. 进入容器
docker exec -it mysql-slave1 /bin/bash
  1. 容器内下载vim,用于编辑配置文件
apt-get update
apt-get install vim
  1. 编辑配置文件
vim /etc/mysql/my.cnf
[mysqld]
server-id=100   # 从的id要注意不要一致
log-bin=mysql-bin
  1. 重启服务
service mysql restart
docker start mysql-master #重启容器

  1. 进入数据库
mysql -uroot -pmysql -uroot -pa123456.
  1. 设置从服务器账号
grant replication slave on *.* to 'test'@'%' identified by '123456';

flush privileges;  #刷新
  1. 查询binlog信息
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

记得以上File 信息 和 Position信息 ,从服务器需要用到

搭建从服务器

slave1服务器

  1. 启动容器
docker run --name mysql-slave1 --privileged=true -v /home/mysql/slave1-data:/var/lib/mysql -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=a123456. -d mysql:5.7
  1. 进入容器
docker exec -it mysql-slave1 /bin/bash
  1. 容器内下载vim,用于编辑配置文件
apt-get update
apt-get install vim
  1. 编辑配置文件
vim /etc/mysql/my.cnf
[mysqld]
server-id=101   # 从的id要注意不要一致
  1. 重启服务
service mysql restart
docker start mysql-master #重启容器

  1. 进入数据库
mysql -uroot -pa123456.
  1. 连接连接主服务器信息
 mysql> change master to master_host='master', master_user='test', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154, master_connect_retry=30;
  1. 开启主从复制
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

slave2服务器

  1. 启动容器
docker run --name mysql-slave2 --privileged=true -v /home/mysql/slave2-data:/var/lib/mysql -p 3308:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=a123456. -d mysql:5.7
  1. 进入容器
docker exec -it mysql-slave1 /bin/bash
  1. 容器内下载vim,用于编辑配置文件
apt-get update
apt-get install vim
  1. 编辑配置文件
vim /etc/mysql/my.cnf
[mysqld]
server-id=102   # 从的id要注意不要一致
  1. 重启服务
service mysql restart
docker start mysql-master #重启容器

  1. 进入数据库
mysql -uroot -pa123456.
  1. 连接连接主服务器信息
 mysql> change master to master_host='master', master_user='test', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154, master_connect_retry=30;
  1. 开启主从复制
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

查询状态

Docker搭建Mysql集群_第1张图片

你可能感兴趣的:(Mysql,Docker,docker,mysql,运维)