美文网首页
Mysql主从配置

Mysql主从配置

作者: denok | 来源:发表于2018-08-17 16:36 被阅读0次

    mysql主备配置的时候,这时主添加数据,备库未更新,这时有查询进来,查询到了备库。如何解决。
    可以sql语句强行走主节点。具体要根据mysql采用哪一种读写分离代理。
    5.1后支持,需要安装插件,还可以半同步,主在存data的时候处于阻塞,等待从节点存入relay binlog返回后。性能差。当主挂掉的时候,主始终处于阻塞状态,从始终得不到更新,解决办法是可以设置阻塞等待时间,一般情况下设置成1秒,但不保证安全。默认是采用异步的。
    5.7mysql可以多线程
    1主 3-4从 1太子节点(保证一致) 1个读 1个业务隔离
    2主 应用场景写非常多,用双主。
    环形多主,跟2主应用场景一样。
    1主级联,与主联系的从挂掉之后,其余的从节点会挂。

    如何解决指定读写库
    Atlas
    可以调权重。
    查订单,从服务器可能更新不及时,可以指定注解/master/从主数据库中去查

    半同步

    还有一种叫Amoeba
    https://blog.csdn.net/lhd85/article/details/48031289
    http://blog.51cto.com/13598893/2092492
    https://blog.csdn.net/m0_37886429/article/details/78844358
    http://lizhao6210-126-com.iteye.com/blog/1716485

    安装环境

    centos 6.x
    mysql mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz

    mysql 依赖的库

    yum search libaio # search for info
    yum install libaio # install library
    yum -y install numactl.x86_64
    yum -y install perl perl-devel
    yum -y install libaio-devel

    创建mysql 与用户组,-s /bin/false 表示该用户不能登录

    groupadd mysql
    useradd -r -g mysql -s /bin/false mysql

    解压安装包至指定目录

    tar zxvf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz
    ln -s mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz mysql

    为 mysql 用户添加权限

    chown -R mysql ./
    chgrp -R mysql ./

    创建data目录并添加权限

    mkdir -p /data/mysql
    chown -R mysql:mysql /data/mysql

    修改配置

    编辑/etc/my.cnf

    master配置

    [mysqld]
    basedir=/opt/mysql
    datadir=/data/mysql
    character-set-server=utf8
    #rpl_semi_sync_master_enabled=1
    server-id=1
    #binlog 格式 
    binlog-format=ROW 
    log-bin=mysql-master-bin 
    #slave更新时是否记录到日志中;
    log-slave-updates=true
    #需要同步的二进制数据库名;
    binlog-do-db=tuling
    #不同步的二进制数据库名,如果不设置可以将其注释掉;
    binlog-ignore-db=information_schema
    binlog-ignore-db=mysql
    binlog-ignore-db=personalsite
    binlog-ignore-db=test
    
    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    

    slave配置

    [mysqld_safe]
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    [mysqld]
    basedir=/opt/mysql
    datadir=/data/mysql
    character-set-server=utf8
    server-id=2
    log-bin=mysql-slave-bin
    binlog-do-db=tuling
    binlog-ignore-db=information_schema
    binlog-ignore-db=mysql
    binlog-ignore-db=personalsite
    binlog-ignore-db=test
    #rpl_semi_sync_slave_enabled=1
    

    初始化 mysql 库

    /opt/mysql/scripts/mysql_install_db --user=mysql --basedir=/opt/mysql --datadir=/data/mysql

    添加环境变量

    vi /etc/profile
    PATH=/opt/mysql/bin:$PATH
    export PATH
    让刚才的修改生效
    source /etc/profile

    启动数据库

    service mysql start

    初始化mysql的一些设置

    mysql_secure_installation
    回车
    Enter current password for root (enter for none):
    y,设置mysql的root密码
    Set root password?[Y/n] y
    以下都yes
    Remove anonymous users?[Y/n] y
    Disallow root login remotely?[Y/n] y
    Remove test database and access to it?[Y/n] y
    Reload privilege tables now?[Y/n] y
    ThanksforusingMySQL!

    允许远程登陆

    mysql -h localhost -u root -p

    1. mysql> use mysql;
    2. mysql> select host,user,password from user;
    3. mysql> update user set password=password('123456') where user='root';
    4. mysql> update user set host='%' where user='root' and host='localhost';
    5. mysql> flush privileges;

    判断MySQL服务器是否支持动态增加插件
    mysql> select @@have_dynamic_loading


    image.png

    主执行

    grant replication slave,super,reload on . to slave1@ 从的IP identified by '123456';
    ···
    命令解析:
    'slave1'@'HOST' :设置用户名即主机ip或网段,网段用%表示 例如10.0.0.%
    IDENTIFIED BY:设置密码
    . :表示所有数据库,所有表
    GRANT REPLCATION SLAVE:就是允许该用户复制数据
    该命令作用就是授权slave1能拷贝数据库的所有内容
    ···

    在master装一个插件"semisync_master.so",这个插件mariadb默认就有,安装插件:
    INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
    查询插件:
    select * from mysql.plugin;

    image.png
    查看状态
    SHOW GLOBAL VARIABLES LIKE '%semi%';
    ···
    rpl_semi_sync_master_enabled ON
    NO表示开启半同步功能,OFF表示关闭
    rpl_semi_sync_master_timeout 10000
    超时时间微秒为单位
    rpl_semi_sync_master_trace_level 32
    rpl_semi_sync_master_wait_no_slave ON
    ···

    show master status;


    image.png

    从执行

    安装插件:
    INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
    查询插件:
    select * from mysql.plugin;

    image.png
    查看状态:
    SHOW GLOBAL VARIABLES LIKE '%semi%';
    ···
    rpl_semi_sync_slave_enabled ON
    rpl_semi_sync_slave_trace_level 32
    ···
    执行master配置:
    change master to master_host='主IP', master_user='slave1', master_password='123456',master_log_file='主查询1', master_log_pos=主查询2;
    ···
    命令解析:
    CHANGE MASTER TO
    MASTER_HOST='master_host',
    指定中继master主机IP
    MASTER_USER='repluser',
    指定master被授权的用户名
    MASTER_PASSWORD='replpass',
    指定被master授权的用户密码
    MASTER_LOG_FILE='mysql-bin.xxxxx',
    指定master服务器的哪个二进制日志开始复制
    MASTER_LOG_POS=#;
    二进制日志位置,可以在master服务器上执行该命令查看,show master logs;
    ···

    重启mysql

    配置好mysql之后
    编辑/etc/my.cnf
    主#rpl_semi_sync_master_enabled=1
    从#rpl_semi_sync_slave_enabled=1
    如果之前不注释,mysql会无法启动
    配置插件才能正常启动
    service mysql restart

    登陆从mysql

    启动slave

    mysql>start slave;

    查看 slave 状态

    show slave status\G;
    Slave_IO_Running: Yes "重点关注如果是NO表示线程没起来"
    Slave_SQL_Running: Yes "重点关注 如果是NO表示该线程没起来"

    故障排除

    半同步配置完毕,下面可以通过命令来验证:
    msyql> show status like '%semi_sync%'
    mysql> show variables like '%Rpl%'

    相关文章

      网友评论

          本文标题:Mysql主从配置

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