• mysql主从和mycat读写分离的安装及验证


    一、背景介绍

    最近需要将公司的d、t、p环境的mysql集群做梳理工作,所以就促使了自己对于mysql主从以及mycat读写分离的安装做了如下总结

    二、安装mysql数据库(主从机器都需要先这样安装)

    1、查看系统中是否自带安装mysql
    yum list installed | grep mysql

    2、删除系统自带的mysql及其依赖(防止冲突)
    yum -y remove mysql-libs.x86_64

    3、安装wget命令
    yum install wget -y

    4、给CentOS添加rpm源,并且选择较新的源
    wget dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

    5、安装下载好的rpm文件
    yum install mysql-community-release-el7-5.noarch.rpm -y

    6、安装成功之后,会在/etc/yum.repos.d/文件夹下增加两个文件
    cd /etc/yum.repos.d/

    7、mysql-community.repo文件可做适当修改,根据需求来定就好,不修改默认也行

    8、使用yum安装mysql
    yum install -y mysql-server

    9、启动mysql服务
    service mysqld start
    查看临时登录密码:cat /var/log/mysqld.log | grep password

    10、登录mysql(如果使用临时登录密码登录还不上的话:vi /etc/my.cnf 文件中加入一行skip-grant-tables登录的时候就可以不用密码了)
    mysql -uroot -p

    输入上面查询到的临时登录密码

    11.修改密码(在 mysql> 这样的状态下执行如下命令)

    alter user user() identified by “XXX你的密码”;

    授权:
    GRANT ALL PRIVILEGES ON . TO ‘root’@'%'IDENTIFIED BY ‘XXX你的密码’ WITH GRANT OPTION;

    修改密码:
    ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘XXX你的密码’;

    查询一下user表查看是否修改成功:
    select user,host from user where user=‘root’;

    成功之后再次更新一下权限:
    flush privileges;

    12、开放3306这个端口号
    查看想开的端口是否已开:firewall-cmd --query-port=3306/tcp
    添加指定需要开放的端口:firewall-cmd --add-port=3306/tcp --permanent
    重载入添加的端口:firewall-cmd --reload
    查询指定端口是否开启成功:firewall-cmd --query-port=3306/tcp

    三、主从机配置

    1、主服务器进行如下操作

    1.1.修改配置文件,编辑配置文件命令
    vim /etc/my.cnf
    1.2.增加如下内容(esc wq! 保存文件):

    #配置MySQL主从复制
    log-bin=mysql-bin
    #和从服务要区分开就好
    server-id=60252
    #设置同步库
    binlog-ignore-db=information_schema
    binlog-ignore-db=cluster
    binlog-ignore-db=mysql

    #mode规则
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    #配置federated存储引擎(支持外链表,如果业务没用到也可以不加这个配置)
    federated

    #忽略表中名称的大小写
    lower_case_table_names=1

    #配置默认编码为utf8
    character_set_server=utf8
    init_connect=‘SET NAMES utf8’

    1.3.重启主服务器的mysqld服务
    service mysqld restart
    1.4.登录mysql数据库
    mysql -uroot -p
    1.5.查看master的状态(执行后,Position 下的值记录下来,用作从机首次拉取文件)
    show master status;

    2、从服务器进行如下操作

    2.1.修改配置文件,编辑配置文件命令
    vi /etc/my.cnf

    2.2.增加如下内容(esc wq! 保存文件):

    #配置MySQL主从复制
    log-bin=mysql-bin
    server-id=60251
    #启用中继日志文件
    relay-log=mysql-relay
    binlog-ignore-db=information_schema
    binlog-ignore-db=cluster
    binlog-ignore-db=mysql

    replicate-ignore-db=mysql
    log-slave-updates
    slave-skip-errors=all
    slave-net-timeout=60

    #mode规则
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    #配置federated存储引擎(支持外链表,如果业务没用到也可以不加这个配置)
    federated

    #忽略表中名称的大小写
    lower_case_table_names=1

    #配置默认编码为utf8
    character_set_server=utf8
    init_connect=‘SET NAMES utf8’

    2.3.重启从服务器并进行相关配置
    service mysqld restart

    2.4.登录mysql
    mysql -uroot -p

    2.5.配置从服务器登录主服务器的账号授权
    2.5.1.授权操作
    grant replication slave on . to ‘root’@‘%’ identified by ‘XXX你的密码’;

    2.5.2.刷新权限
    flush privileges;

    2.6.连接主服务器首次同步(“主服务器ip”、“XXX你的密码”、"步骤1.5.中主机查询出来的值"都需要修改)
    change master to master_host=‘主服务器ip’,master_user=‘root’,master_password=‘XXX你的密码’,master_port=3306,master_log_file=‘master-bin.000001’,master_log_pos=步骤1.5.中主机查询出来的值;

    2.7.启动slave
    start slave;

    2.8.slave备用命令
    停止slave
    stop slave;
    #设置slave(用来清除残留文件)
    reset slave;

    2.9.查看slave的状态(注意这个命令最后没有分号;Slave_IO_Running: Yes Slave_SQL_Running: Yes,显示这两个状态为Yes表示正常)
    show slave status\G

    四、代理服务器安装和配置mycat读写分离

    1.如下地址查找版本号:
    http://dl.mycat.org.cn

    2.下载mycat的安装包
    wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

    3.解压
    tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

    4.配置文件修改(参考)
    conf/schema.xml

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
            <schema name="库名" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" >
            </schema>
            <dataNode name="dn1" dataHost="mycatip" database="库名" />
            <dataHost name="mycatip" maxCon="1000" minCon="10" balance="3"  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                    <heartbeat>select user()</heartbeat>
                    <!-- can have multi write hosts -->
                    <writeHost host="masterip" url="masterip:3306" user="root" password="XXX">
                            <readHost host="slaveip" url="slaveip:3306" user="root" password="XXX" ></readHost>
                    </writeHost>
            </dataHost>
    </mycat:schema>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    conf/server.xml
    在这里插入图片描述

    5.启动mycat
    …/bin/mycat start
    …/bin/mycat stop

    6.查看是否启动成功
    ps aux|grep mycat

    7.开通mycat的8066端口号
    查看想开的端口是否已开:firewall-cmd --query-port=8066/tcp
    添加指定需要开放的端口:firewall-cmd --add-port=8066/tcp --permanent
    重载入添加的端口:firewall-cmd --reload
    查询指定端口是否开启成功:firewall-cmd --query-port=8066/tcp

    五、主从复制、读写分离的验证(小编这里使用的navicat进行的链接验证)

    1.主服务器执行库、表创建,查看从库是否同步(具体命令不再赘述)

    2.主服务器执行数据的增、删、改查看从库是否同步(具体命令不再赘述)

    3.主从服务器中执行如下语句,临时打开日志文件以便于查看执行的sql语句
    SET GLOBAL general_log=ON;//打开数据库的日志功能
    SHOW VARIABLES LIKE ‘log_output’; //这是为了查看log_output是什么输出方式,默认是file
    SET GLOBAL log_output=‘TABLE’;//这里我们修改成数据表的输出方式。

    4.mycat服务器进行数据的增、删、改、查操作(具体命令不再赘述)

    5.主服务器查看是否只有增、删、改语句
    SELECT event_time,command_type,convert(argument using utf8mb4) as argument from mysql.general_log ORDER BY event_time desc limit 0,100

    6.从服务器查看是否只有查语句
    SELECT event_time,command_type,convert(argument using utf8mb4) as argument from mysql.general_log ORDER BY event_time desc limit 0,100

    六、总结

    1.通过将这些命令组成脚本来提高效率
    2.通过镜像+文件修改的脚本来提高效率
    3.过程中明确操作的每一项的边界,其中涉及到的带分号的命令,和不能带分号的命令,以及它们为什么是这样的思考?
    4.验证的边界,以及验证的对应脚本
    5.自己的这些操作还需要再明确和梳理每一个配置的意义,以及每一步操作步骤的意义

    七、升华

    第一次安装借助同事的简易文档,一边梳理一边安装大概历史2h;自己整理完之后,又进行了一次安装+验证工作大概半小时以内,并且也思考了如何提升到十分钟以内,以及如何也可以让任何一个同事在十分钟以内做到这个事情,我想这就是迭代的过程吧

  • 相关阅读:
    <Linux>(极简关键、省时省力)《Linux操作系统原理分析之Linux 进程管理 3》(7)
    复杂算子onnx导出(1): trace的实现
    低成本实现webhook接收端[python]
    【技术课堂】从批到流:pull or not pull, that's a question
    vue中自定义指令的使用场景及示例
    使用IIS创建WEB服务
    mysql命令行导入csv文件,涵盖各种报错解决(亲测)
    11/20总结报告
    浅学一下二叉树的顺序存储结构——堆
    修改yum源为国内yum源和本地yum源
  • 原文地址:https://blog.csdn.net/u013030601/article/details/124917537