学习搭建MySQL主从分离

  • 提升性能,我们会将数据库操作进行读写分离,写操作在主数据库(Master)完成,读操作在从数据库(Slave)完成
  • 架构模式
  • 一主一从 M-S
  • 主主复制 M-S
  • 一主多从 M-SSS
  • 多主一从(5.7) MMM-S
  • 联结复制 M-S-SS-S

一般都是读多写少,因此呈现的通常是一主多从的架构,如果一个应用是读少写多,则可以考虑多主一从。双 M 架构主要是为了方便随时切换主库,降低配置成本。

  • 搭建一主一从

底层流程

  • 在从库(Slave)中通过 change master 命令设置要同步数据的主库 IP、端口、用户名、密码;

  • 在从库执行 start slave 命令启动两个线程,即上图中的 I/O Thread 和 SQL Thread;

  • 其中 I/O Thread 会通过第一步设置的主库配置信息与主库(Master)建立长连接,主库检验完这些配置后,

  • 从库传递的 binlog 同步位置读取 binlog 日志发送给从库(binlog 里面记录着主库所有更新记录);
    从库拿到 binlog 日志后,会写入到一个为 Relay Log(中转日志)的本地文件;
    SQL Thread 读取从库中的 Relay Log,解析命令,由从库执行完成数据同步。

  • 主库和从库一旦建立连接后,主库会有一个专门的线程来维护与从库的长连接,以便新增的 binlog 日志能够源源不断地发送给从库进行数据同步。

docker命令
  • docker ps 查看状态
  • docker images 查看本地镜像
  • systemctl daemon-reload
  • systemctl restart docker.service
  • 拉取mysql镜像docker pull mysql:latest
  • 运行容器
启动主
  • docker run -itd --name mysql-test -p 3306:3306(映射容器服务) -e MYSQL_ROOT_PASSWORD=123456(设置 MySQL 服务 root 用户的密码) mysql
启动从
  • docker run -itd --name mysql-slave -p 3307:3307 -e MYSQL_ROOT_PASSWORD=123456 mysql/mysql-server
进入某个容器
  • docker exec -it mysql-master bash
查找端口
  • netstat -antup | grep docker
显示所有容器和启动
  • docker ps -a
  • docker start [容器id]
查看主mysql的信息
  • show master status;
登录从mysql

登录容器,配置

  • 从mysql的账号密码设置,为 mysql -hlocalhost -proot -p123456 -P3307

  • 从mysql设置 :

``
change master to MASTER_HOST='127.0.0.1',MASTER_USER='root',MASTER_PASSWORD='123456',MASTER_LOG_FILE='binlog.000002',MASTER_LOG_POS=0;

``

  • 启动 start slave;
  • show slave status;
  • 两个都是Yes才是配置成功
  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes
关闭主从同步
  • STOP SLAVE;

  • 主服务器创建数据库;

  • 从服务器复制

    []()

无法登录Mysql,执行如下

  • mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

  • flush privileges;

注意事项: uuid或者server-id相同会导致配置失败
Slave_SQL_Running:no解决:
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
` start slave;

posted @ 2021-02-22 14:28  惊风破浪的博客  阅读(79)  评论(0编辑  收藏  举报