环境准备
云服务器或虚拟机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
测试
在Master服务器创建test数据库上创建一个表t_class;是否在Slave从服务器自动创建test数据库中自动创建t_class;