文档章节

基于Docker MySQL的主从复制

流萤飘枫丶
 流萤飘枫丶
发布于 2017/08/14 21:11
字数 1306
阅读 27
收藏 0

 

Docker MySQL 实现主从复制(1 Master + 2 Slave)


  1.要求:
      3个mysql版本一致
      初始化表,并在后台启动mysql
      修改root密码
     
修改配置文件:
启动一个docker mysql 容器,并进入,复制其配置文件 /etc/mysql/my.cnf到本地,作为基础配配置   

docker run --name db1 -p 30000:3306 -d -e MYSQL_ROOT_PASSWORD='root' mysql:5.6
docker exec -it 757b /bin/bash
cat /etc/mysql/my.cnf

拷贝内容到 /home/jayhe/jay/config/mysql/master_2slave/my-m.cnf 作为基础配置,下面的修改都是基于这个基础配置
            
  2.修改主服务器master:
      my.cnf

[mysqld]
#[必须]启动二进制日志
log-bin=mysql-bin
#[必须]设置服务器唯一ID,默认时1,一般取IP最后一段
server-id=3001 


  3.修改从服务器slave:
      my.cnf 

[mysqld]
#[非必须]启动二进制日志
log-bin=mysql-bin
#[必须]设置服务器唯一ID,默认时1,一般取IP最后一段
server-id=3002
      

my.cnf

[mysqld]
#[非必须]启动二进制日志
log-bin=mysql-bin
#[必须]设置服务器唯一ID,默认时1,一般取IP最后一段
server-id=3003

启动3个mysql:
主服务器:挂载   /xx/xx/my.cnf(主服务器配置)到mysql容器

docker run --name mysql1 -p 3001:3306 -d -v /home/jayhe/jay/config/mysql/master_2slave/my-m.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD='root' mysql:5.6

从服务器:挂载   /xx/xx/my.cnf(从服务器配置)到mysql容器

docker run --name mysql2 -p 3002:3306 -d -v /home/jayhe/jay/config/mysql/master_2slave/my-s1.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD='root' mysql:5.6
docker run --name mysql3 -p 3003:3306 -d -v /home/jayhe/jay/config/mysql/master_2slave/my-s2.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD='root' mysql:5.6

连接容器中的mysql   ---  即使本地mysql每启动,仍然可以连接容器的mysql服务
语法:

mysql -h IP -P port -uroot -proot

 

##连接主服务器
mysql -h 127.0.0.1 -P 3001 -uroot -proot     
##登录主服务器,创建账户并授权
grant replication slave on *.* to 'mysync'@'%' identified by 'root';
##查看主服务器状态
show master status;


+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 |      312 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
  登录从服务器:

 mysql -h 127.0.0.1 -P 3002 -uroot -proot

配置从服务器:  
---  这里的 master_log_file='mysql-bin.000004', master_log_pos与主服务器中的master status一致

change master to master_host='172.17.64.106',master_port=3001,master_user='mysync',master_password='root',master_log_file='mysql-bin.000004', master_log_pos=312;

启动从服务器复制功能

start slave;

查看从服务器复制功能状态:
     

   show slave status;

 

        +----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+----------------------------+-----------+---------------------+-----------------------------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+

| Slave_IO_State                   | Master_Host   | Master_User | Master_Port | Connect_Retry | Master_Log_File  | Read_Master_Log_Pos | Relay_Log_File          | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error | Replicate_Ignore_Server_Ids | Master_Server_Id | Master_UUID                          | Master_Info_File           | SQL_Delay | SQL_Remaining_Delay | Slave_SQL_Running_State                                                     | Master_Retry_Count | Master_Bind | Last_IO_Error_Timestamp | Last_SQL_Error_Timestamp | Master_SSL_Crl | Master_SSL_Crlpath | Retrieved_Gtid_Set | Executed_Gtid_Set | Auto_Position |
+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+----------------------------+-----------+---------------------+-----------------------------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+
| Waiting for master to send event | 172.17.64.106 | mysync      |        3001 |            60 | mysql-bin.000004 |                 409 | mysqld-relay-bin.000002 |           380 | mysql-bin.000004      | Yes              | Yes               |                 |                     |                    |                        |                         |                             |          0 |            |            0 |                 409 |             554 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 | No                            |             0 |               |              0 |                |                             |             3001 | 735f9147-d3ec-11e6-b8c6-0242ac120002 | /var/lib/mysql/master.info |         0 |                NULL | Slave has read all relay log; waiting for the slave I/O thread to update it |              86400 |             |                         |                          |                |                    |                    |                   |             0 |
+----------------------------------+---------------+-------------+-------------+---------------+------------------+---------------------+-------------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+----------------------------+-----------+---------------------+-----------------------------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+

注意:
   Slave_IO_State  =  Waiting for master to send event
   Slave_IO和Slave_SQL 都是 YES
   则表示主从复制配置成功
  测试主从复制:
        进入主服务器,创建一个数据库
       mysql -h 127.0.0.1 -P 3001 -uroot -proot
       create database test1;
        进入从服务器,查看数据库,发现已经存在了test1   --- 与主服务器同步
            mysql -h 127.0.0.1 -P 3001 -uroot -proot
            mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test1              |
+--------------------+
            
特别注意:
1.主服务器中,创建账户并授权
grant replication slave on *.* to 'mysync'@'%' identified by 'root';
一般不用root账户,
 *.* 表示所有客户端都可连,只要账户和密码正确,这里可用具体IP代替,加强安全 eg: 192.168.145.222
          
2.从服务器中,配置从服务器时:
master_host 为docker的宿主机地址,    不能写  127.0.0.1
master_port 为主服务器mysql映射到宿主机的端口  3001
master_user 为主服务器中创建的用户            mysync
master_log_file 为主服务器show master status查询出来的 File
master_log_pos 为主服务器show master status查询出来的 Position      
               
3.配置文件其他内容配置项:
#如果需要增加Slave库则,此id往后顺延;  
server-id = 2    
log-bin=mysql-bin  
#主库host  
master-host = 192.168.168.253  
#在主数据库服务器中建立的用于该从服务器备份使用的用户  
master-user = forslave  
master-password = ******  
master-port = 3306  
#如果发现主服务器断线,重新连接的时间差;  
master-connect-retry=60  
#不需要备份的数据库;   
replicate-ignore-db=mysql  
#需要备份的数据库  
replicate-do-db=minishop  
log-slave-update 
         
            

 4.从MySQL镜像容器中获取的 my.cnf 基础配置 

# Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.  
#  
# This program is free software; you can redistribute it and/or modify  
# it under the terms of the GNU General Public License as published by  
# the Free Software Foundation; version 2 of the License.  
#  
# This program is distributed in the hope that it will be useful,  
# but WITHOUT ANY WARRANTY; without even the implied warranty of  
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
# GNU General Public License for more details.  
#  
# You should have received a copy of the GNU General Public License  
# along with this program; if not, write to the Free Software  
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA  
  
#  
# The MySQL Community Server configuration file.  
#  
# For explanations see  
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html  
  
[client]  
port        = 3306  
socket      = /var/run/mysqld/mysqld.sock  
  
[mysqld_safe]  
pid-file    = /var/run/mysqld/mysqld.pid  
socket      = /var/run/mysqld/mysqld.sock  
nice        = 0  
  
[mysqld]  
user        = mysql  
pid-file    = /var/run/mysqld/mysqld.pid  
socket      = /var/run/mysqld/mysqld.sock  
port        = 3306  
basedir     = /usr  
datadir     = /var/lib/mysql  
tmpdir      = /tmp  
lc-messages-dir = /usr/share/mysql  
explicit_defaults_for_timestamp  
log-bin=mysql-bin  
server-id=3001  
# Instead of skip-networking the default is now to listen only on  
# localhost which is more compatible and is not less secure.  
#bind-address   = 127.0.0.1  
  
#log-error  = /var/log/mysql/error.log  
  
# Recommended in standard MySQL setup  
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES  
  
# Disabling symbolic-links is recommended to prevent assorted security risks  
symbolic-links=0  
  
# * IMPORTANT: Additional settings that can override those from this file!  
#   The files must end with '.cnf', otherwise they'll be ignored.  
#  
!includedir /etc/mysql/conf.d/  

 

© 著作权归作者所有

流萤飘枫丶
粉丝 13
博文 176
码字总数 106070
作品 0
成都
程序员
私信 提问
【20180402】MySQL关于replication filter和trigger的一些应用

需求描述 1.内网服务器有俩套主从复制环境,一套是基于传统复制的5.6.26版本,另外一套是基于GTID的5.7.19版本的复制。现在开发的需求是需要将基于传统复制的上面的俩个表同步到基于基于GTI...

liuhuang9496
2018/04/03
0
0
MySQL传统主从复制(第一弹)

0、引言 MySQL主从复制的原理及搭建,故障分析 一、MySQL主从同步的架构及原理 原理: 1)Slave连接到master,主从数据一致,开启同步,开始同步数据 2) 用户在主上写入数据,日志储存到bin...

IT--小哥
2016/12/13
55
0
MySQL主从复制搭建,基于日志(binlog)

什么是MySQL主从复制 简单来说就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保...

fz00x0zf
2018/03/02
46
0
MySQL5.6主从复制最佳实践

MySQL5.6主从复制最佳实践 MySQL5.6 主从复制的配置 环境 操作系统:CentOS-6.6-x86_64 MySQL 版本:mysql-5.6.26.tar.gz 主节点 IP:192.168.31.57 主机名:edu-mysql-01 从节点 IP:192.1...

rootliu
01/31
51
0
rhel6下,mysql 5.6.14 主从复制(也称mysql AB复制)环境配置[基于binlog]

更多博文请关注:没有伞的孩子必须努力奔跑 (www.xuchanggang.cn) 一、mysql主(称master)从(称slave)复制的原理: (1).master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-b...

xcga_wise
2013/11/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
20分钟前
3
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
22分钟前
2
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部