docker mysql主从配置

平手友梨奈

环境准备

云服务器或虚拟机2台或者启动2个容器
docker安装并启动,获取mysql镜像
可查考![http://www.runoob.com/docker]

文件挂载

挂载配置文件,数据文件,日志文件
位置自定

#创建文件夹
mkdir /usr/local/docker/mysql/conf
mkdir /usr/local/docker/mysql/data
mkdir /usr/local/docker/mysql/logs

主数据库my.cnf配置文件

# 字符集 
[mysql]
default-character-set=utf8

[mysql_safe]
default-character-set = utf8

[client]
default-character-set=utf8

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# 字符集
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

symbolic-links=0

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

# 开启二进制日志
log-bin=mysql-bin
# 设置master,此值不能和从数据库的一样
server-id = 1
# 表示哪些库不同步,每个不同步的库写一行
binlog-ignore-db=mysql

# Custom config should go here
!includedir /etc/mysql/conf.d/

从数据库my.cnf配置文件



# 字符集 
[mysql]
default-character-set=utf8

[mysql_safe]
default-character-set = utf8

[client]
default-character-set=utf8

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

# 字符集
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake

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

symbolic-links=0

# 设置master,此值不能和从数据库的一样
server-id = 2
# 表示哪些库不同步,每个不同步的库写一行
binlog-ignore-db=mysql

# Custom config should go here
!includedir /etc/mysql/conf.d/

设置时区(可选)

echo 'Asia/Shanghai' > /etc/timezone

初始启动容器

端口自定 命名自定

docker run -p 3306:3306 --privileged=true --name master-mysql -v /usr/local/docker/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/docker/mysql/logs:/logs -v /usr/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

-p 3307:3306:将容器的 3306 端口映射到主机的 3307 端口。

挂载时区
-e TZ=Asia/Shanghai 或 -v /etc/timezone:/etc/timezone

--privileged=true:(可移除)container容器内的root拥有真正的root权限

--name meteor-mysql :容器命名

-v $PWD/usr/local/docker/mysql/conf/:/etc/mysql/conf.d:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf。

-v $PWD/usr/docker/local/mysql/logs:/logs:将主机当前目录下的 logs 目录挂载到容器的 /logs。

-v $PWD/usr/docker/local/mysql/data:/var/lib/mysql :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql 。

-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码。

主数据库创建slave账户

登录主数据库mysql

#创建账户
create user 'slave'@'%' IDENTIFIED BY '123456'; 
#授予复制权限
grant replication slave on *.* to 'slave'@'%';
#刷新权限
flush privileges;

查询主数据库状态

 show master status;

记录File,Position值


开启从数据库同步

执行同步SQL语句

CHANGE MASTER TO 
Master_Host='IP地址',
Master_User='slave',
Master_Password='123456',
Master_Port=3307,
Master_Log_File='mysql-bin.000004',
Master_Log_POS=155;

启动同步进程

 start slave;

主从同步检查

show slave status;

清除同步

reset  slave all;

如果Slave_IO_Running 与 Slave_SQL_Running 的值都必须为YES,表明成功了;如果不是,请自行google


image.png

测试

在Master服务器创建test数据库上创建一个表t_class;是否在Slave从服务器自动创建test数据库中自动创建t_class;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 环境 操作系统:CentOS-6.5-x86_64-bin-DVD1.iso MySQL版本:mysql-5.6....
    宇信智臻sy阅读 2,689评论 0 6
  • 01 有的人活的风风火火,有的人过的可有可无 我属于可有可无的一份子 高中同学有好多是没有说过话的,特别是异性 对...
    小姝阅读 494评论 6 13
  • (这是一篇需要安静阅读的网文,请把你的心“放出来”。) 我有很多朋友,每个朋友都有一些我欣赏的特点。虽然我们不常常...
    林旦玲阅读 382评论 0 1
  • 国庆,哪里都没有去。一来有工作,二来有家事,三来囊中羞涩。只是在刷朋友圈,然而看到好些有满满正能量的文章,认真读了...
    立达阅读 240评论 0 0
  • 如果你能保持冷静,当你身边的人们都变得疯狂,纷纷指责你,如果你能相信自己,当所有人怀疑你但且让他们怀疑去吧,如果你...
    找自己的idea阅读 219评论 0 0