美文网首页
Mysql主主复制和读写分离(全过程)

Mysql主主复制和读写分离(全过程)

作者: 歪歪嘴的小不点 | 来源:发表于2019-04-29 14:45 被阅读0次


    搭建环境:

    centos7:3.10.0-327.el7.x86_64

    docker:1.12.6, build 78d1802

    mysql:5.7.13

    mycat:1.6

    搭建准备:

    安装docker

    拉取mysql镜像

    解压mycat压缩包

    开始搭建:

    1、创建并启动容器,以及映射mysql数据

    docker run --name mysql-master1 -e MYSQL_ROOT_PASSWORD=root -v /data/mysql_data:/var/lib/mysql -d -i -p 3306:3306 mysql:5.7.13 

    2、进入容器

    ①进入docker

    docker exec -it mysql-master1 /bin/bash

    ②进入mysql,并输入密码root

    mysql -u root -p

    3、新建用户,新建数据库,赋予权限(如果需要的话)

    ①新建用户 user ,设置密码 123456

    CREATE USER 'user'@'%.%.%.%' IDENTIFIED BY '123456';

    ②创建数据库testdb,并指定字符编码

    CREATE DATABASE IF NOT EXISTS `testdb` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`;

    ③赋予权限

    GRANT ALL PRIVILEGES ON `testdb`.* TO 'user'@'%.%.%.%';

    4、修改mysql配置文件,为主主复制做准备

    ①将docker中的mysql的配置文件拷贝到当前目录(容器里面没有vi,拷贝出来修改再拷贝回去,效果一样)

    docker cp mysql-master1: /etc/mysql/mysql.conf.d/mysqld.cnf .

    ②修改,在[mysqld]第一行加入如下内容(server-id的值可以任意,保证2个节点值不同即可):

    server-id=101

    log-bin=mysql-bin

    log-bin-trust-function-creators=1

    lower_case_table_names = 1

    replicate-do-db=testdb

    ③拷贝回去

    docker cp mysqld.cnf mysql-master1: /etc/mysql/mysql.conf.d/

    ④重启容器

    docker restart mysql-master1

    5、新建mysql-master2容器(具体步骤和新建mysql-master1节点一样,有个地方要改一下)

    4-②步骤(值不用和我一样,保证前后值不同即可):

    server-id=101 修改为server-id=102

    6、重新进入容器,并进入mysql,加锁,获取bin文件的名称和位置

    ①进入mysql后,锁表(如果该表不在使用,不加锁也可以)

    flush tables with read lock;

    ②获取bin文件信息

    show master status;

    ③记录名称和位置(我这里,master1是mysql-bin.000003和13784608,master2是mysql-bin.000001和1588591)

    master1 master2

    7、分别进入2个容器的mysql,执行命令,这样子2个容器才能读取互相的bin文件内容(数据库的操作会记录到bin文件中,这样子以实现互相复制)

    ①进入master1容器的mysql,执行命令(x.x.x.x是master2容器主机的ip,3306是端口,然后是数据库的用户名和密码,然后是master2容器的bin文件名称和位置)

    change master to master_host=‘x.x.x.x',

    master_port=3306,

    master_user='root',

    master_password='root',

    master_log_file='mysql-bin.000001',

    master_log_pos=1588591;

    ①进入master2容器的mysql,执行命令(x.x.x.x是master1容器主机的ip,3306是端口,然后是数据库的用户名和密码,然后是master1容器的bin文件名称和位置)

    change master to master_host=‘x.x.x.x',

    master_port=3306,

    master_user='root',

    master_password='root',

    master_log_file='mysql-bin.000003',

    master_log_pos=13784608;

    8、查看复制状态(Slave_IO_Running和Slave_SQL_Running的状态为YES)

    show slave status\G;

    9、2个mysql分别解锁,开启复制,完工

    unlock tables;

    start slave;

    读写分离(mycat):

    1、进入mycat的conf目录下,分别修改schema.xml和server.xml

    ①schema.xml修改如下:

    schema.xml

    配置说明:

    schema标签:name可以任意,server.xml用到,dataNode的值,是dataNode标签的name

    dataNode标签:name需要与schema标签的dataNode一样,dataHost是dataHost标签的name,database即为你需要读写分离的数据库

    dataHost标签:name同理,balance=3,表示所有读请求,随机分发到writeHost对应的readHost上,writeHost不分担读压力,writeType=0,表示所有写请求分配到一个配置的writeHost上,第一个挂了,会自动切换到第二个writeHost, switchType=2,表示根据主从状态决定是否切换,检测语句是:show slave status

    ②server.xml修改如下:

    server.xml末尾内容

    在server.xml末尾添加如上内容,用户名和密码是连接mycat的用户名和密码,schemas即是我们在schema.xml中配置的schema标签的name,如果配置了多个,用逗号隔开。如果加上<property name="readonly">true</property>,表示该用户只读。

    在该配置文件中,还可以修改很多属性,比如:服务绑定地址,服务端口,管理端口等等,可自行修改。

    ③修改保存后,进入bin目录,执行命令:./mycat start 即可启动mycat服务

    ④启动日志,放在logs目录下,wrapper.log文件为启动日志,如果启动失败,可以查看该文件,mycat.log文件为服务日志,查看该文件可以判断服务是否正常,如果出现了连接某个mysql节点失败,请检查schema.xml中配置的ip、端口、用户名、密码是否正确。

    本篇完。

    相关文章

      网友评论

          本文标题:Mysql主主复制和读写分离(全过程)

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