说明
- 使用的
docker
镜像mysql:5.7.18
; - 容器中
mysql
配置文件目录/etc/mysql/
;
步骤
- 启动镜像,将镜像中配置目录拷贝到宿主机
#启动,并设置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
#配置文件目录结构
[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
- 查看
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)
- 修改
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 删除
- 启动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
- 其它主从配置,参考非
docker
安装配置
- 添加主从帐号
- 配置主从信息
- 开启半同步复制
- 开启从节点只读模式
- …
- 使用
keepalive
工具
写一个脚本/etc/docker_mysql.sh
判断docker
中mysql
是否存活
#! /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
}