PHP8.1.21版本已发布
vue8.1.21版本已发布
jquery8.1.21版本已发布

Docker的Mysql主从复制详解

小云云
小云云 原创
2018-02-07 14:39:32 1139浏览

本文主要和大家分享基于Docker的Mysql主从复制,希望能帮助到大家。

环境简介

主服务器:jd云 centos

从服务器:Vultr云 CentOS

为了方便测试,都使用Docker运行Mysql,Docker启动命令如下:

           
 <a style='color:#f60; text-decoration:underline;' href="https://m.php.cn/zt/15865.html" target="_blank">docker</a> run --name <a style='color:#f60; text-decoration:underline;' href="https://m.php.cn/zt/15713.html" target="_blank">mysql</a>-server-01 -p 3306:3306 -v "$PWD"/conf.d:/etc/mysql/conf.d -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw  -d mysql:latest

以上均把mysql配置目录和data目录映射到了宿主机。

配置Master

为了方便,专门建一个目录用来操作master数据库,结构如下

           
mysql
└── server01
    ├── conf.d
    ├── data
    └── start.sh

在cond.d建立my.cnf用来配置master

           
[mysqld]log-bin=mysql-binserver-id=1innodb_flush_log_at_trx_commit=1sync_binlog=1

然后就可以启动容器了。

启动后,进入容器操作mysql

           
# 进入容器
docker exec -it 容器ID bash

# 进入msyql客户端
mysql -u root -p

# 新建salve用户并配置权限,格式如下
mysql> CREATE USER &#39;repl&#39;@&#39;%.example.com&#39; IDENTIFIED BY &#39;password&#39;;
mysql> GRANT REPLICATION SLAVE ON *.* TO &#39;repl&#39;@&#39;%.example.com&#39;;

# 查看master状态,这里file和position后面配置salve会用到mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 |     1092 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

配置slave服务器

slave my.cnf配置文件如下(这里为了简便,省去很多参数,勿用于生产环境):

           
[mysqld]server-id=2

然后启动容器,进入mysql客户端。

           
# 配置master到slave
mysql> CHANGE MASTER TO
    ->     MASTER_HOST=&#39;master_host_name&#39;,    ->     MASTER_USER=&#39;replication_user_name&#39;,    ->     MASTER_PASSWORD=&#39;replication_password&#39;,    ->     MASTER_LOG_FILE=&#39;recorded_log_file_name&#39;,    ->     MASTER_LOG_POS=recorded_log_position;

上面的MASTER_LOG_FILE和MASTER_LOG_POS就是前面show master stuas 看到的file和position

然后启动slave

           
START SLAVE;

查看运行状态:

           
mysql> show slave status\G;*************************** 1. row ***************************               Slave_IO_State: Waiting for master to send event                  Master_Host: xxx.com                  Master_User: slave1                  Master_Port: 3306                Connect_Retry: 60              Master_Log_File: mysql-bin.000001          Read_Master_Log_Pos: 1092               Relay_Log_File: ca210e4caaaa-relay-bin.000002                Relay_Log_Pos: 813        Relay_Master_Log_File: 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: 1092              Relay_Log_Space: 1027              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: 0Master_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: 1                  Master_UUID: 5c2073ab-0ad6-11e8-a871-0242ac110005             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)

上面Slave_IO_Running和Slave_SQL_Running都为YES,说明主从已经配置好了。

总结

mysql常见架构有三种

  • 单实例架构

  • 主从复制

  • MHA高可用架构

其中主从复制一种是基于上面的binary log复制的方式,还有一种是基于全局事务标识(GTID)的方式。

相关推荐:

详解MySQL实现主从复制过程_Mysql实例详解

关于MySQL5.7.18主从复制搭建一主一从实例详解

Mycat读写分离在MySQL主从复制基础上实现的实例

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。