美文网首页
Docker 搭建MySql8.0主从集群

Docker 搭建MySql8.0主从集群

作者: tianchaohongyu | 来源:发表于2022-01-13 16:04 被阅读0次

    概念

    分布式的数据库集群可以大幅提升数据库性能,MySql的集群同步原理主要为:

    1. MySql从节点从主节点下载binlog实现数据同步
    2. binlog下载受MySql账户体系限制,因此需要配置权限
    3. 从节点需要配置主节点的信息,以及同步时使用的用户和密码

    使用Docker搭建主从集群

    前言

    搭建主从同步其实很简单,大概分为以下几步:

    1. 安装主节点
    2. 点建立binlog下载专用用户
    3. 安装从节点
    4. 配置主节点连接信息

    主节点

    # 1.安装主节点
    # 启动主节点 使用 mysql/mysql-server:8.0.23 镜像,映射为3306端口、root作为默认用户的密码
    # 关键点1:-p 宿主机端口:容器内数据库端口
    # 关键点2:-v 宿主机数据库数据存放路径:/lib/mysql
    docker run --restart=always --name mysql-master --privileged=true -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.27
    
    # 2.建立binlog下载专用用户
    # 进入docker 容器
    docker exec -it mysql-master bash
    # 使用root用户进入mysql
    mysql -uroot -proot
    # 使root所有ip皆可访问(方便开发,可省略)
    update mysql.user set host = '%' where user = 'root';
    # 新建用户test并授权
    # 关键点1: 密码必须使用原生插件:mysql_native_password,否则从节点连接时会报错:Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connect
    create user 'slave_user'@'%' identified with mysql_native_password by 'slave_password';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave_user'@'%';
    # 然后刷新权限
    flush privileges;
    # 查看主节点状态,并记录File和Position参数,最后,可以执行 exit命令退mysql和docker容器
    show master status;
    

    从节点

    # 1.安装主从节点
    # 启动从节点 使用 mysql/mysql-server:8.0.23 镜像,映射为3307端口、root作为默认用户的密码
    # 关键点1: 由于主节点占用了3306端口,所以此处使用了3307,而不是3306
    # 关键点2: 必须加上--link参数,其后指定了当前容器所要连接的容器,mysql-master表示所要连接的容器的名称,master表示为该容器起的一个别名,slave容器通过这两个名称都可以访问到master容器
    # 关键点3: -v 宿主机数据库数据存放路径:/lib/mysql
    docker run --restart=always --name mysql-slave --privileged=true -p 3307:3306 --link mysql-master:master -e MYSQL_ROOT_PASSWORD=root -d mysql/mysql-server:8.0.27
    
    # 2.修改节点id
    # 进入docker容器
    docker exec -it mysql-slave /bin/bash
    # 创建配置文件,节点id改为2(默认是1,主节点已占用)
    cat << EOF >> /etc/my.cnf
    server-id=2
    EOF
    # 停止mysql服务,此时docker容器应该也会一同停止
    mysqladmin -u root -proot shutdown
    
    # 3.设置同步参数
    # 重新进入docker容器中,此处省略1000字...
    # 进入mysql 
    mysql -uroot -proot
    # 使root所有ip皆可访问(方便开发,可跳过)
    update mysql.user set host = '%' where user = 'root';
    flush privileges;
    # 切换同步参数,使用有权限的用户连接上master服务器,并且复制其数据
    # 关键点: MASTER_LOG_FILE 和 MASTER_LOG_POS 是从主节点复制过来的 File和Position参数
    change master to MASTER_LOG_FILE='主节点的binlog.000002', MASTER_LOG_POS=1111 , master_host='master', master_user='slave_user', master_password='slave_password', master_port=3306, master_connect_retry=30;
    # 开启同步
    start slave;
    # 然后查看状态
    # 关键点1: 查看 Slave_IO_State,必须是 Waiting for source to send event
    # 关键点2: 查看 Slave_SQL_Running_State:,必须是 Replica has read all relay log; waiting for more updates
    show slave status\G;
    # 最后,可以执行 exit命令退mysql和docker容器
    

    结语

    到此,一个有运行在Docker上的MySql主从集群便已搭建完毕,赶紧在主节点创建数据库、表和写入数据看看主从同步的威力吧!

    相关文章

      网友评论

          本文标题:Docker 搭建MySql8.0主从集群

          本文链接:https://www.haomeiwen.com/subject/phwncrtx.html