mysql【docker部署之主从复制】


说明

  • 使用的docker镜像mysql:5.7.18;
  • 容器中mysql配置文件目录/etc/mysql/;

步骤

  1. 启动镜像,将镜像中配置目录拷贝到宿主机
    #启动,并设置root密码
    docker run -d --name mysql  -e MYSQL_ROOT_PASSWORD=123456 hub.deri.org.cn/library/mysql:5.7
    

#复制
docker cp mysql:/etc/mysql /root


```sh
#配置文件目录结构
[root@mysql01 mysql]# tree
.
├── conf.d
│   ├── docker.cnf
│   └── mysql.cnf
├── my.cnf -> /etc/alternatives/my.cnf
├── my.cnf.fallback
├── mysql.cnf
└── mysql.conf.d
    └── mysqld.cnf

2 directories, 6 files
  1. 查看mysql data目录,便于将docker中数据持久化到宿主机
-- 登录
docker exec -it mysql bash
mysql -uroot -p123456
-- 查询
mysql> show variables like '%datadir%';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)
  1. 修改mysql.cnf

    #参考mysql主从配置
    [mysqld]
    server-id=1 # 主从设置不一样
    log-bin=mysql-bin #备无需开启
    auto-increment-increment=2
    auto-increment-offset=2 # 主从设置不一样:1,2
    log-slave-updates=true
    #replicate-ignore-db=information_schema
    max_binlog_size=1024M
    binlog-format=ROW
    #binlog_rows_query_log_events=on # 在row 模式的binlog中包含SQL EVENTS(即SQL语句也会保留)
    #master-info-repository=TABLE
    #relay-log-info-repository=TABLE
    #slave-skip-errors=all # 忽略复制产生的错误
    #slave-skip-errors=1062,1032,1060 # 跳过已知错误,主键冲突、表已存在等错误代码如1062,1032,1060等
    #relay-log-purge = 1    #是否自动清空不再需要中继日志时。默认值为1(启用)
    #expire_logs_days = 30  #超过 30 天的 binlog 删除
  2. 启动mysql

    #映射端口、配置文件和data
    docker run -d --name mysql -v /root/mysql:/etc/mysql -v /var/lib/mysql/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306  hub.deri.org.cn/library/mysql:5.7
    

#也可以按需只映射一个配置文件mysql.cnf
docker run -d –name mysql -v /root/mysql/mysql.cnf:/etc/mysql/mysql.cnf -v /var/lib/mysql/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 hub.deri.org.cn/library/mysql:5.7


5. 其它主从配置,参考非`docker`安装配置

- 添加主从帐号
- 配置主从信息
- 开启半同步复制
- 开启从节点只读模式
- ...

6. 使用`keepalive`工具

写一个脚本`/etc/docker_mysql.sh`判断`docker`中`mysql`是否存活
```sh
#! /bin/bash
count=$(docker ps |grep hub.deri.org.cn/library/mysql:5.7 | grep Up| wc -l)
if [ $count == "1" ];then
    exit 0
else
    exit 1
fi


#测试这个脚本
[root@mysql01 ~]# docker stop mysql
mysql
[root@mysql01 ~]# ./docker_mysql.sh 
[root@mysql01 ~]# ./docker_mysql.sh ;echo $?
1
[root@mysql01 ~]# docker start mysql 
mysql
[root@mysql01 ~]# ./docker_mysql.sh ;echo $?
0

#配置keepalived
vrrp_script chk_mysql {
    script "/etc/docker_mysql.sh"
    interval 2
    timeout 2
    fall 3
}

文章作者: wuzhiyong
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 wuzhiyong !
评论
 上一篇
mysql【监控指标采集mysqld-exporter】 mysql【监控指标采集mysqld-exporter】
说明prometheus监控插件mysqld_exporter可以采集mysql指标并告警展示. 步骤本文使用docker部署的方式 创建用户并授权```sqlCREATE USER ‘exporter’@’%’ IDENTIFIED B
2020-08-04
下一篇 
docker【hosts新增记录】 docker【hosts新增记录】
使用docker run运行一个新的容器的时候,通过参数 --add-host来添加域名和IP信息到容器的/etc/hosts文件中。例如: docker run -d --name test --add-host=addr.com:10.
2020-08-03
  目录