数据库复制原理
因为数据库底层有二进制日志的功能记录了数据库的各种存储语句,通过复制和解析日志,从数据库可以应用到自身,重新执行日志命令,以达到和主数据库数据一致 mysql -uroot -p123456
拉取镜像之前,先创建主数据库和从数据库数据卷,conf.d是放置配置文件的,mysql目录放置data数据文件
主数据库示例,从数据库的创建同理(创建从数据库时目录不同、server-id不同就行)
mkdir -p /home/docker/mysql/conf.d
mkdir -p /home/docker/mysql/var/lib/mysql
[mysqld]
log-bin=mysql-bin #启用二进制日志
server-id=100 #服务器唯一ID
lower_case_table_names=1
#server-id=1
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysqlx.sock
#symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
docker pull mysql:5.7
运行两个容器,一个端口号为3306,另一个为3307
docker run --name mysqlmaster -v /home/docker/mysql/conf.d:/etc/mysql/conf.d -v /home/docker/mysql/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d 3306:3306 mysql:5.7
docker run --name mysqlslave -v /home/docker/mysql2/conf.d:/etc/mysql/conf.d -v /home/docker/mysql2/var/lib/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d 3307:3306 mysql:5.7
运行容器之后,先连接主数据库mysqlmaster
docker exec -it mysqlmaster bash
mysql -uroot -p123456
GRANT REPLICATION SLAVE ON *.* to 'laohutu'@'%' identified by 'root@123456';
命令介绍
给从数据库开放一个能够连接主数据库的用户,这个用户的权限和意义就是允许其它通过此账号连接 通过show master status;命令查看状态,如果结果说empty,表明创建失败 接下来设置从数据库,想退出数据库直接写入exit命令,退两次
docker exec -it mysqlslave bash
mysql -uroot -p123456
change master to master_host='192.168.125.128',master_user='laohutu',master_password='root@123456',master_log_file='mysql-bin.000001',master_log_pos=441;
命令介绍:
master_user,刚刚创建的连接主数据库用户的名称 master_host 主机连接路径 master_log_file 日志文件的名称 master_log_pos日志文件保存位置 然后start slave 开启连接 通过show slave status查看从数据库状态 其中在显示内容中有Waiting for master to send event则表明连接成功