docker 安装mysql 主从,以及遇到的问题

实时查看docker容器日志

$ docker logs -f -t --tail 100 容器名

错误:Slave_IO_Running: No

原因是:

(1)是mysql的 master 和slave 数据存储 mysql/data/auto.cnf 文件中 server-uuid相同,要修改不相同

server-uuid=9a0a90a7-f091-11e8-a8ab-0242ac120004

(2)master_log_pos=3199  必须与主机一致, 日志位置,必须一致

(3)如果 两边的库与表不一致,如master 上有5个数据库,slave有4个数据库,  当master 上删除第5个数据库,那么slave报错

Slave_SQL_Running: No

并且 slave 关闭,不可用了,要重新创建

 

----1下载mysql 镜像

docker pull xiaochunping/mysql-master;

docker pull xiaochunping/mysql-slave;

-- 2cnetos docker run ,把my.cnf和data数据引入到属主机

-----------------

master配置文件/home/mysql/etc/master/my.cnf

slave配置文件/home/mysql/etc/slave/my.cnf

mkdir -p /home/mysql/etc/master/

mkdir -p /home/mysql/etc/slave/

mkdir -p /home/mysql/master-data

mkdir -p /home/mysql/slave-data

master/my.cnf

[mysqld]
##################基础设置##################
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log

# By default we only accept connections from localhost
#bind-address	= 127.0.0.1

#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=1

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
init_connect=‘SET NAMES utf8mb4‘

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1

##################主从复制设置##################
#开启mysql binlog功能
log-bin=/var/log/mysql/mysql-bin.index

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

slave/my.cnf

[mysqld]
##################基础设置##################
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
#log-error	= /var/log/mysql/error.log

# By default we only accept connections from localhost
#bind-address	= 127.0.0.1

#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id=2

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci

#设置client连接mysql时的字符集,防止乱码
init_connect=‘SET NAMES utf8mb4‘

#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1

##################主从复制设置##################
#开启mysql binlog功能
log-bin=/var/log/mysql/mysql-bin.index

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

3 启动

docker run \
--name mysql-master \
--privileged=true \
-v /home/mysql/etc/master:/etc/mysql/conf.d \
-v /home/mysql/master-data:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=root \
-d xiaochunping/mysql-master


docker run \
--name mysql-slave \
--privileged=true \
-v /home/mysql/etc/slave:/etc/mysql/conf.d \
-v /home/mysql/slave-data:/var/lib/mysql \
-p 3307:3306 --link mysql-master:master \
-e MYSQL_ROOT_PASSWORD=root \
-d xiaochunping/mysql-slave

-----------------

启动完成 进入修改密码,MYSQL_ROOT_PASSWORD=123456 不生效的,密码必须root 原因未知,未研究

-- 3.2快速启动

docker run --name mysql-master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-master

docker run --name mysql-slave -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=root -d xiaochunping/mysql-slave

-----------------

3.3// 如果授权给*就不需要查看ip

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master【查看主IP】

docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-slave【查看从IP】

4 .1登入主容器

docker exec -it mysql-master /bin/bash

4.2登入主数据库

mysql -uroot -proot

grant replication slave on *.* to 'test'@'%' identified by '123456';

flush privileges;

// 查看主的状态

show master status;

5.1登入从容器

docker exec -it mysql-slave /bin/bash

5.2登入从数据库

mysql -uroot -proot

5.3 设置matser 日志记录File和Position对应的值

change master to master_host='master', master_user='test', master_password='123456', \

master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=589, master_connect_retry=30;

5.4 启动slave 

start slave;

5.5查看从的状态

show slave status\G

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值