首先下载mysql的镜像,我们可以在dockerhub上面查看mysql有那些版本:
选择我们需要下载的版本,我自己下载的是mysql5.7 的
输入命令:
docker pull mysql:5.7
在使用docker启动mysql命令之前我们需要将docker容器中的mysql的主要数据挂载在我们的宿主机上面,所以我们先创建好存放mysql主要数据的目录
我在根目录下创建了一个data文件夹然后里面创建了两文件夹有分别为:master_mysql,savle_mysql
这两个文件的里的文件目录都是一样的分别为:
conf:存放MySQL的配置文件
data:存放mysql的数据
log:存放mysql的日志
然后我们需要将mysql的my.cnf配置文件放到conf文件中 my.cnf内容为:
[mysqld]
##表示是本机的序号为1,一般来讲就是master的意思(salve的配置也一样只不过server-id的值不一样) 同一个局域网内的序号不能一样
server-id = 1
skip-name-resolve
## 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,
## 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
##开启二进制日志功能
log_bin = mysql-bin
binlog_format = mixed
##超过30天的binlog删除
expire_logs_days = 30
##设置二进制日志使用内存大小
binlog_cache_size=1M
##跳过主从复制中遇到的所有错误和指定类型的错误,避免slave端复制终端,
##如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
创建好目录之后我们就需要启动MySQL了,首先我们启动master-mysql
命令:
docker run -d -it -p 3306:3306 --name master-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /data/master_mysql/log:/var/log/mysql -v /data/master_mysql/data:/var/lib/mysql -v /data/master_mysql/conf:/etc/mysql --privileged=true mysql:5.7
-d后台启动
-i:终端
-t:交互
-p 宿主机端口:docker容器中mysql启动的端口
-e 是设置MySQL密码
-v 就是我们需要将容器中的mysql挂载在宿主机的文件
查看是否启动成功:
docker ps -q
启动成功之后 继续启动savle-mysql:
docker run -it -d -p 3077:3077 -v /data/savle_mysql/conf/:/etc/mysql -v /data/savle_mysql/log/:/var/log/mysql -v /data/savle_mysql/data/:/var/lib/mysql/ -e MYSQL_ROOT_PASSWORD=123456 --name savle-mysql --privileged=true mysql:5.7
然后查看是否启动成功:
都启动成功之后我们需要进入master-mysql中设置可以访问master-mysql的账号和权限,操作步骤如下:
首先进入master-mysql容器中:
docker exec -it master-mysql /bin/bash
然后在master_mysql容器中登入MySQL
进入MySQL之后创建一个复制主数据库的账号:
create user 'savle'@'%' identified by '密码'
然后在给账号可以复制主库的权限:
grant replication slave,replication client on *.* to 'savle'@'%'
到此master-mysql配置好了,
然后我们在查看master的状态:
show master status;
我们需要记住file和position一会配置savle-mysql时参数用的到 具体干什么的 请看下面详解
接下进入savle-mysql容器然后登入mysql客户端:
首先配置:
change master to master_host='192.168.169.128',master_user='savle',master_password='123456',master_port=3077,master_log_file='mall-mysql-bin.000001',master_log_pos=814,master_connect_retry=30;
命令的意思是我们需要和那个master_mysql进行主从复制,我们复制时主mysql是使用什么账号和密码,这时候我们就可以将在mysql创建的账号写入,然后在知道复制主mysql的那个日志,从什么位置复制,最后一个参数是链接失败之后多少秒重试。
master_host:主mysql的ip地址,
master_port:主mysql的端口号
master_user:用哪个账号登入主mysql进行复制数据
master_password:登入账号的密码
master_log_file:复制那个日志file,根据我们自己的my.cnf设置,也可以通过前面主mysql查看 file名字
master_log_pos:从什么位置复制
master_connect_retry:链接失败之后多少秒之后在重试。
最后开启从数据库同步:
start slave;
查看状态是否成功:
show slave status \G;
\G的意思是显示方式为key,value方式显示
Slave_IO_Running,Slave_SQL_Running都为yes表示搭建成功。