首页 > 数据库 >基于docker的mysql主从同步搭建

基于docker的mysql主从同步搭建

时间:2022-12-02 10:44:06浏览次数:47  
标签:slave mydata qeek ## master mysql docker 主从

环境

1、macbook
2、docker 20.10.17
3、docker desktop

开始搭建

* 第一步:准备容器文件存放的物理文件地址目录(/Users/qeek/mydata 可以按需定义)

##### 主库
mkdir -pv /Users/qeek/mydata/mysql-master/log
mkdir -pv /Users/qeek/mydata/mysql-master/data
mkdir -pv /Users/qeek/mydata/mysql-master/conf.d
mkdir -pv /Users/qeek/mydata/mysql-master/conf

##### 从库
mkdir -pv /Users/qeek/mydata/mysql-slave/log
mkdir -pv /Users/qeek/mydata/mysql-slave/data
mkdir -pv /Users/qeek/mydata/mysql-slave/conf.d
mkdir -pv /Users/qeek/mydata/mysql-slave/conf

* 第二步:docker desktop(docker桌面管理工具)-> Preferences -> Resources -> File sharding

 把上面新创建的目录添加进去后重启docker(绑定宿主机目录到docker容器中),否则会报目录权限问题。

* 第三步:设置主从服务配置

##### 主库 
新增 /Users/qeek/mydata/mysql-master/conf/my.cnf
      
        [mysqld]
        ## 设置server_id,同一局域网中需要唯一
        server_id=101 
        ## 指定不需要同步的数据库名称
        binlog-ignore-db=mysql  
        ## 开启二进制日志功能
        log-bin=mall-mysql-bin  
        ## 设置二进制日志使用内存大小(事务)
        binlog_cache_size=1M  
        ## 设置使用的二进制日志格式(mixed,statement,row)
        binlog_format=mixed  
        ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
        expire_logs_days=7  
        ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
        ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
        slave_skip_errors=1062

##### 从库 
新增 /Users/qeek/mydata/mysql-slave/conf/my.cnf

        [mysqld]
        ## 设置server_id,同一局域网中需要唯一
        server_id=102
        ## 指定不需要同步的数据库名称
        binlog-ignore-db=mysql  
        ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
        log-bin=mall-mysql-slave1-bin  
        ## 设置二进制日志使用内存大小(事务)
        binlog_cache_size=1M  
        ## 设置使用的二进制日志格式(mixed,statement,row)
        binlog_format=mixed  
        ## 二进制日志过期清理时间。默认值为0,表示不自动清理。
        expire_logs_days=7  
        ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
        ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
        slave_skip_errors=1062  
        ## relay_log配置中继日志
        relay_log=mall-mysql-relay-bin  
        ## log_slave_updates表示slave将复制事件写进自己的二进制日志
        log_slave_updates=1  
        ## slave设置为只读(具有super权限的用户除外)
        read_only=1

* 第四步:启动docker mysql服务

##### 主库 
  * docker run --name mysql-master -p 3307:3306 -v /Users/qeek/mydata/mysql-master/log:/var/log/mysql -v /Users/qeek/mydata/mysql-master/data:/var/lib/mysql -v /Users/qeek/mydata/mysql-master/conf.d:/etc/mysql/conf.d/ -v /Users/qeek/mydata/mysql-master/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.31

##### 从库 
 * docker run --name mysql-slave -p 3308:3306 -v /Users/qeek/mydata/mysql-slave/log:/var/log/mysql -v /Users/qeek/mydata/mysql-slave/data:/var/lib/mysql -v /Users/qeek/mydata/mysql-slave/conf.d:/etc/mysql/conf.d/ -v /Users/qeek/mydata/mysql-slave/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.31

##### 查看docker镜像清单 
docker container ls -a

图片描述

##### 进入docker 主库镜像内
docker exec -it mysql-master bash

##### 进入docker 主库mysql内
mysql -u root -p

##### 主库内设置从库读取数据账号
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
##### 主库内授权账号复制权限
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO 'slave'@'%';
##### 主库内设置密码加密方法(mysql8.0.4之前使用的“ mysql_native_password”认证,之后用的“ caching_sha2_password”,修改成老的加密认证方式)
ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
##### 查看mysql master主库状态,记住“File”和“Position”值

##### "exit;"退出主库mysql,再"exit;"退出mysql主库镜像

##### 查看mysql主库docker镜像内ip地址
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mysql-master

##### 进入mysql从库镜像内
docker exec -it mysql-slave bash

##### 进入从库mysql内
mysql -uroot -p

设置从库的主库地址及日志文件、当前数据位置“master_log_file = 上面 File ”、“master_log_pos = 上面 Position”
change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mall-mysql-bin.000005', master_log_pos=157, master_connect_retry=30;

##### 启动从库同步
start slave;

查看从库同步状态,如果“Slave_IO_State = Waiting for source to send event”,那么恭喜你mysql主从配置完成,去主库操作会自动同步从库了。
show slave status;

* 第五步:最终效果

标签:slave,mydata,qeek,##,master,mysql,docker,主从
From: https://www.cnblogs.com/xiamibk/p/16943692.html

相关文章

  • mysql client命令行端的容易忽视的命令
    mysqlclient命令行端的容易忽视的命令参考:​​​http://www.mysqlperformanceblog.com/2014/02/27/dba-101-sometimes-forgotten-functionality-my......
  • (转)针对MySQL的Linux性能调优技巧[翻译]
    ​​http://mdba.cn/?p=244​​​原文作者:AlexanderRubin,Percona工程师原文连接:LinuxperformancetuningtipsforMySQL为了方面阅读,我没依照......
  • 5分钟搞定 MySQL 到 Greenplum / PostgreSQL 数据迁移同步
    简述本文主要介绍如何使用CloudCanal构建一条MySQL到Greenplum/PostgreSQL的数据同步链路。支持版本源端MySQL支持的版本为:5.6、5.7、8.X对端PostgreSQL支......
  • mysql 备忘
    scdeleteysql2.初始化mysqlmysqld--initialize--console3.初始化后得到初始密码(需要记录初始密码,后续会用到),初始密码为最后一行:'root'@'localhost'':'密码'4.安装mysql......
  • 【MySQL数据割接案例】实现按某个字段分组,再将组内的排序序号更新为排序字段的值
    事情是这样的,原本设计了一个树状结构的目录表,目录下面的节点(类似于文件)有多个类型的。由于原先只考虑一种类型A的数据,因此将目录下目录项的排序维护在了A数据表里,后面扩展......
  • 15个Docker基本命令及用法
    查看docker安装信息dockerinfo获取docker镜像dockerpullazraelrabbit/monupw创建docker容器dockerrun--namemonojexus-d-p32022:22-p32080:80-v/mydata:/data......
  • Centos 7 docker 启动容器iptables报No chain/target/match by that name
    分析问题原因系统默认没有安装iptables模块查看系统是否有iptables模块yuminstalliptables-services查看防火墙是否安装成功iptables-v卸载docker模块检测已经安装的dock......
  • Mysql中文乱码问题(unbutu)
    1.首先查看数据库里面的各种编码格式mysql>showvariableslike"%char%";+--------------------------+---------------+|Variable_name|Value|+--------------------......
  • win10下面部署Mysql数据库
    5.6.24下载地址:​​​http://down10.zol.com.cn/biancgj/mysql_5.6.24_winx64.zip​​下载完成以后解压,在安装目录下面新增my.ini,内容如下:[mysql]#设置mysql客户端默认......
  • mysql8.0使用总结
    1.初始化数据库后,想导入数据,发现报错:ERROR1227(42000)atline75612:Accessdenied;youneed(atleastoneof)theSYSTEM_USERprivilege(s)forthisoperatio......