美文网首页容器架构编程技巧
mysql主从配置(docker)

mysql主从配置(docker)

作者: dark68 | 来源:发表于2021-07-03 21:31 被阅读0次

    1 什么是主从

    主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。因为复制是异步进行的,所以从服务器不需要一直连接着主服务器,从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。

    2 主从解决的问题

    1.通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
    2.提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据。
    3.在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能。

    3 主从原理

    1.每个从仅可以设置一个主。
    2.主在执行SQL之后,记录二进制log文件(bin-log)。
    3.从连接主,并从主获取bin-log,存于本地relay-log,并从上次记住的位置起执行SQL,一旦遇到错误则停止同步。

    4 配置步骤

    配置-主

    1.创建一个用户,并给予权限

    mysql> create user `dark`@`%` identified by "root";
    mysql> grant all on *.* to `dark`@`%` with grant option;
    

    2.开启binlog日志
    在/etc/my.cnf文件的[mysqld]下写入如下:

    log-bin=mysql-bin
    binlog_format=mixed
    server-id = 1
    

    配置-从

    1.修改server_id

    server_id = 2
    

    2.配置主从

    change master to master_host="192.168.63.123",master_port=3306,master_user=root,master_password=root,master_log_file="mysql-bin.000001",master_log_pos=4
    

    5 实践

    1.进入主容器(主mysql默认搭建完成),查看相关信息
    查看用户信息

    mysql> select user,host,plugin from mysql.user;
    +------------------+-----------+-----------------------+
    | user             | host      | plugin                |
    +------------------+-----------+-----------------------+
    | dark             | %         | mysql_native_password |
    | root             | %         | mysql_native_password |
    | mysql.infoschema | localhost | caching_sha2_password |
    | mysql.session    | localhost | caching_sha2_password |
    | mysql.sys        | localhost | caching_sha2_password |
    | root             | localhost | mysql_native_password |
    +------------------+-----------+-----------------------+
    6 rows in set (0.00 sec)
    

    查看bin-log信息

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000003 |   321925 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    

    2.创建相关配置文件目录,修改配置文件

    cp /etc/my.cnf /docker/mysql-slave1/conf/
    cp /etc/my.cnf /docker/mysql-slave2/conf/
    

    修改两个配置文件的端口分别为3307、3308,以及server-id = 2、server-id = 3

    3.创建两个容器

    docker run -p 3307:3307 -d --name mysql-slave1 -v /docker/mysql-slave1/conf/my.cnf:/etc/mysql/my.cnf --privileged=true -e MYSQL_ROOT_PASSWORD=root mysql
    docker run -p 3308:3308 -d --name mysql-slave2 -v /docker/mysql-slave2/conf/my.cnf:/etc/mysql/my.cnf --privileged=true -e MYSQL_ROOT_PASSWORD=root mysql
    

    4.从,相关配置
    进入容器salve1,进行相关配置

    mysql>change master to master_host="172.17.0.4",master_port=3306,master_user="dark",master_password="root",master_log_file="mysql-bin.000003",master_log_pos=321925;
    
    mysql> start slave;
    
    mysql> show slave status\G;
    

    slave2和上述配置相同,不再赘述。

    在主中新建数据库,查看从是否会同步。

    mysql> create database lmrs_users;
    Query OK, 1 row affected (0.00 sec)
    
    slave1
    slave2

    6 mycat配置主从

        <dataHost name="lmrs_order" maxCon="1000" minCon="10" balance="3"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <writeHost host="hostM1" url="192.168.35.139:3306" user="root" password="root">
                <readHost host="hostS2" url="192.168.35.139:3307" user="root" password="root"/>
                <readHost host="hostS3" url="192.168.35.139:3308" user="root" password="root"/>
            </writeHost>
        </dataHost>
    

    如果
    mysql> show slave status\G
    Slave_IO_Running: Yes
    Slave_SQL_Running: No
    可能是数据库主从发生了故障
    解决方法:
    1、先停止同步:mysql>stop slave;
    2、使用命令:mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    3、开启同步:mysql>start slave;
    4、使用命令:mysql>show slave status\G,查看Slave_SQL_Running的值,如果不为Yes,则重复上述3步,直到为Yes

    相关文章

      网友评论

        本文标题:mysql主从配置(docker)

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