美文网首页
mysql主从、主主配置

mysql主从、主主配置

作者: YukunWen | 来源:发表于2020-07-15 16:42 被阅读0次

    引言

    实际生产中要求数据库的高可用性,就要考虑mysql的主从、主主。若针对的是上云的机器,比如使用阿里云,那可以购买相应厂商的服务,只需要修改相应的配置就可以做到热备,冷备的效果。但是若针对的是使用自己的服务器的企业,那只能自己撸起袖子来干了。

    参考网址

    1.mysql主从
    Mysql主从复制原理及搭建
    https://www.jianshu.com/p/b0cf461451fb
    2.mysql设置步长
    mysql修改数据表自增步
    3.更进一步,mysql双主
    https://www.jianshu.com/p/469279c1ad39

    主主搭建

    本文将以174,175两台服务器为例子,介绍给读者双主数据库的搭建方法。

    1. Mysql安装

    安装方法在网上有很多,此处本文就不在重复了,但是要强调一点,两台机器上的mysql至少安装5.7以上的版本,且两台机器上的mysql版本,安装路径,配置,最好是一模一样的。

    2. Mysql配置

    修改my.cnf配置信息,默认安装存放在 /etc/my.cnf中

    2.1 开启relay log配置

    这里以174上的mysql作为例子,同理可修改175上的配置,建议配置均以后缀IP不同作为区分。

    [mysqlId]
    # 同一局域名内注意要唯一
    server-id=174
    # 开启二进制日志功能,可以随便取(关键)
    log-bin=mysql-bin-174
    # relay_log配置中继日志
    relay_log=mysql-relay-bin-174
    

    2.2 设置步长

    在主主同步是先写入一台机器,然后在同步到另外一台机器上面,本质上并不是数据的同步,而是sql语言的同步。基于这个原理,在双主模式下如果只是单纯使用mysql的自增长策略,那将会导致冲突(比如A机器插入一条id为3的数据,B机器也插入了一条id为3的数据,这样子AB机器之间就无法同步了)。
    这个问题其实可以扩大成分布式环境下数据库id一致性问题。解决办法有很多,比如本博主之前写到的另外一篇文章,采用雪花算法保证全局id的唯一性。

    关于雪花算法的一些思考与工具类实现

    这里因为是两台机器,所以我们可以做一种简单处理,针对mysql的自增长一台为单数,一台为复数进行区分。因此修改mysql配置如下

    [mysqlId]
    #设置步长,两台机器均为2
    auto_increment_increment=2
    #设置初始值,一台为1,另一台为2
    auto_increment_offset=1
    

    修改完成mysql的配置后记得要重启

    sevice mysql restart
    

    3. mysql主主实现

    在两台机器174,175上均用root用户访问mysql

    3.1 创建slave用户

    174

    create user 'slave'@'xx.xx.xx.175' identified by 'pwd';
    grant replication slave,replication client on *.* to 'slave'@'xx.xx.xx.175';
    flush privileges;
    

    175

    create user 'slave'@'xx.xx.xx.174' identified by 'pwd';
    grant replication slave,replication client on *.* to 'slave'@'xx.xx.xx.174';
    flush privileges;
    

    3.2 配置主主

    在174上配置自己为slave,主指向175;
    在175上配置自己为slave,主指向174。

    174

    show master status \G; #记录下 file和position
    master_host='xx.xx.xx.175',master_user='slave',master_password='pwd',master_port=3306,master_log_file='175上记录下的file',master_log_pos=175上记录下的position;
    

    175

    show master status \G; #记录下 file和position
    master_host='xx.xx.xx.174',master_user='slave',master_password='pwd',master_port=3306,master_log_file='174上记录下的file',master_log_pos=174上记录下的position;
    

    命令说明
    master_host :Master的地址
    master_port:Master的端口号
    master_user:用于数据同步的用户
    master_password:用于同步的用户的密码
    master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
    master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
    master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

    分别在174和175中中查看主从同步状态:

    show slave status \G;
    

    此时的SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。
    开启主从复制:

    start slave;
    

    再次查看同步状态:

    show slave status \G;
    

    SlaveIORunning 和 SlaveSQLRunning 都是Yes说明主从复制已经开启。

    4. 更多

    4.1 问题

    若SlaveIORunning一直是Connecting,有下面4种原因:
    1、网络不通,检查ip端口
    2、密码不对,检查用于同步的用户名和密码
    3、pos不对,检查Master的Position
    4、mysql8特有的密码规则问题引起:
    ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '@#$Rfg345634523rft4fa';
    将密码规则修改为:mysql_native_password

    4.2 指定数据库主从

    如果需要指定想要主从同步哪个数据库,可以在master的my.cnf添加配置:

    binlog-do-db:指定mysql的binlog日志记录哪个db
    

    或者在slave的my.cnf添加配置:

    replicate-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可 
    replicate-ignore-db=需要忽略的数据库名,如果忽略多个数据库,重复设置这个选项即可
    

    4.3 slave的启动

    若遇到奇怪的问题,可以先关闭slave,调整好file和position,在重新开启。不过此时应该注意两边数据的完整性

    stop slave;
    start slave;
    

    相关文章

      网友评论

          本文标题:mysql主从、主主配置

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