新建用户组
# groupadd mysql
新建用户
# useradd mysql
设置密码
# passwd mysql
新的密码:weikaixxxxxx
重新输入新的 密码:weikaixxxxxx
下载mysql5.7
# docker pull mysql:5.7
查看镜像是否下载成功
# docker image ls
启动mysql容器,并添加数据卷
# docker run --name master1 -v /dockerdata/mysql/master1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3000:3306 mysql:5.7
# docker run --name master2 -v /dockerdata/mysql/master2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3001:3306 mysql:5.7
# docker run --name Slave1 -v /dockerdata/mysql/Slave1:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3002:3306 mysql:5.7
# docker run --name Slave2 -v /dockerdata/mysql/Slave2:/var/lib/mysql -e MYSQL_ROOT_PASSWORD='password' -d -p 3003:3306 mysql:5.7
查看所有容器是否全部启动
# docker ps
如果没有就启动所有容器
# docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
依次进入四个mysql容器,设置远程访问授权(横线内)
# docker exec -it 容器id bash
# mysql -uroot -ppassword
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysql'@'%' IDENTIFIED BY 'weikaixxxxxx';
格式:GRANT REPLICATION SLAVE ON *.* TO '新开帐号'@'%' IDENTIFIED BY '新开帐号密码';
刷新mysql用户权限相关表
mysql> FLUSH PRIVILEGES;
查看是否添加成功
mysql> select host,user from mysql.user;
退出mysql控制台
mysql> exit
注意:此时还在容器内,别出去喽。
修改配置文件,添加server-id=1
与log-bin=mysql-bin
俩行
# find / -name mysqld.cnf
搜索到的 /etc/mysql/mysql.conf.d/mysqld.cnf
,这里只需要查一次就行,因为镜像的路径一样,其它的容器就不需要查直接用。
# echo 'server-id=1' >> /etc/mysql/mysql.conf.d/mysqld.cnf \
& echo 'log-bin=mysql-bin' >> /etc/mysql/mysql.conf.d/mysqld.cnf
# cat /etc/mysql/mysql.conf.d/mysqld.cnf
server-id
:指定服务器唯一id,不可重复。也就是不同容器里的id要不一样,递增即可(1,2,3,4)。
log-bin
:开启binlog日志
如果哪里操作出问题了,下面的命令可以删除最后一行
sed -i '$d' /etc/mysql/mysql.conf.d/mysqld.cnf
退出容器
# exit
横线到了,重复以上步骤到其它容器。
为了让配置文件生效,重启所有容器
# docker restart $(docker ps -a | awk '{ print $1}' | tail -n +2)
进入主库容器(master1)
# docker exec -it 容器id bash
mysql> mysql -uroot -ppassword;
mysql> show master status;
mysql> exit
你的数字应该会跟我的不同。记住File和Position的内容。
配置从库,这里的操作是为了当主库1变更就会使从库1变更。
进入从1(Slave1)
# docker exec -it 容器id bash
mysql> mysql -uroot -ppassword;
关闭slave服务,下一步需要
mysql> stop slave;
配置连接信息
mysql>
CHANGE MASTER TO
MASTER_HOST = '192.168.247.140',
MASTER_USER = 'mysql',
MASTER_PASSWORD = 'weikaixxxxxx',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_PORT = 3000,
MASTER_LOG_POS = 154;
格式:
master_host
:主库ip地址
master_user
:新建的用户
master_password
:新建的用户密码
master_log_file
:sql语句 show master status的File字段
MASTER_PORT
:连接库的端口
MASTER_LOG_POS
:sql语句 show master status的Position字段
开启slave服务
mysql> start slave;
mysql> show slave status\G;
mysql> exit
# exit
需要俩个都是Yes才算成功。
“配置连接信息”:你B库要复制A库的数据,你就在B填A库的数据。
测试主从复制
为了更直观的看效果,使用navicat这个软件来测试。使用root登录。
在主1新建一个数据库test和test表。会自动同步到从1。
现在,到主1里去添加一条数据,你会发现从1复制成功。
主主复制
主主复制按照上面的“配置连接信息”,在主1配置主2的mysql> show slave status\G;
信息,再到主2配置主1的mysql> show slave status\G;
信息即可。只是一个互相复制对方的数据而已。