docker学习系列12 轻松实现 mysql 主从同步

  • 时间:
  • 浏览:0

slave 目录顶端的 mysqld.cnf 内容为

docker run --name mysql_master -d -p 34007:34006 -e MYSQL_ROOT_PASSWORD=123456 -v D:/docker/mysql-master-slave/master/data:/var/lib/mysql -v D:/docker/mysql-master-slave/master/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf mysql:5.7

mysqld.cnf 文件的由来?

答:也不从容器内的 /etc/mysql/mysql.conf.d/mysqld.cnf 拷贝出来的

change master to master_host='172.17.0.2',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=34006; 启动从库同步

docker的一大好处是在本地可不没有很方便快速的搭建负载均衡,主从同步等没有多主机的环境。

可不没有说是极大方便了运维成本和难度。

本节在本地搭建mysql的一主一从的集群环境。

创建 mysql-master-slave 目录,比如完整版路径是

D:/docker/mysql-master-slave

目录价值形式如下:

-- master

-- data

mysqld.cnf

-- slave

-- data

mysqld.cnf

image.png

以mysql5.7为例

https://www.cnblogs.com/w2206/p/69640065.html

https://github.com/Junnplus/blog/issues/1

主从同步的简单原理?

答:

MySQL的主从基因重组是一四个 多异步的基因重组过程,数据库从一四个 多Master基因重组到Slave数据库,在Master与Slave之间实现整个主从基因重组的过程是由一四个 多多程序运行 参与完成的,其中有 一四个 多多程序运行 (SQL多程序运行 和IO多程序运行 )在Slave端,曾经多程序运行 (IO多程序运行 )在Master端。

master 数据变化后要产生bin log日志,slave上的多程序运行 拉去bin log,后要在slave上重新执行日志。曾经就保证了数据一致性。

从服务器同步失败?

答:看错误日志 tail /var/log/mysql/error.log

重新执行同步

stop slave;change master to master_log_file='mysql-bin.000400,master_log_pos=123' 关于 file 和 pos,需在master上执行show master status获得。

GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456'; 查看具体情况,记住File、Position的值,在 Slave 中将用到

start slave 查看具体情况,原困 Slave_SQL_Running_State 是 Slave has read all relay log; waiting for more updates 表示正常运行。

其中master目录顶端的 mysqld.cnf 配置文件内容为

docker exec -it mysql_master bashmysql -u root -p 创建一四个 多同步数据权限的用户

image.png

怎样加进多个从节点?

和加进第一四个 多从节点类事,先导出master的数据,基因重组第一四个 多slave配置文件,唯一要改变的是server-id,没有和你这个的重复。后要启动新的容器,进到容器内执行change master to ...

还没有注意当前master没有写入等操作,最好先锁表,同步设置好后在解锁。参考

你这个 后要宿主机的 Navicat 应该可不没有连上容器里的一四个 多数据库了。

关于主从同步的流程图,放张网上找的流程图

show slave status 中的Slave_IO_Running和Slave_SQL_Running的含义?

答:Slave 上会共同有一四个 多多程序运行 在工作, I/O 多程序运行 从 Master 得到数据(Binary Log 文件),放满去被称为

Relay Log 文件中进行记录。此人 面,SQL 多程序运行 则将 Relay Log 读取并执行。

为有哪些要有一四个 多多程序运行 ?这是为了降低同步的延迟。原困 I/O 多程序运行 和 SQL 多程序运行 后要相对很耗时的操作。

docker run —name mysql_slave -d -p 34008:34006 -e MYSQL_ROOT_PASSWORD=123456 -v D:/docker/mysql-master-slave/slave/data:/var/lib/mysql -v D:/docker/mysql-master-slave/slave/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf mysql:5.7

docker exec mysql_master mysql -uroot -p123456 -e "CREATE DATABASE test"docker exec mysql_slave mysql -uroot -p123456 -e "SHOW DATABASES"

进入slave容器

docker exec -it mysql_slave bashmysql -u root -p 设置主库链接

image.png