美文网首页
mysql8 主主负载配置

mysql8 主主负载配置

作者: 张建勇9511 | 来源:发表于2019-08-01 10:26 被阅读0次

    一、CentOS7下安装mysql8

    1.1 安装前清理工作
    rpm -pa | grep mysql
    

    查找出安装的mysql相关软件包依赖包,

    yum remove mysql-xxx-xxx-
    

    删除找到的软件依赖包

    find / -name mysql
    

    查找mysql相关目录,

    rm -rf /var/lib/mysql
    

    删除目录

    1.2 安装mysql8

    1.2.1 先去官网下载mysql的repo源并安装,
    mysql repo下载地址

    mysql repo 下载地址
    1.2.2 下载好的mysql repo文件上传到Centos,安装 yum repo文件并更新 yum 缓存
      rpm -ivh mysql80-community-release-el7-3.noarch.rpm
    

    执行后在 /etc/yum.repos.d/ 目录下生成两个repo文件


    repo文件

    更新 yum 命令

    yum clean all
    yum makecache
    

    1.2.3 使用 yum安装mysql

    yum install mysql-community-server
    

    安装mysql

    1.2.4 配置my.cnf

    lower_case_table_names = 1 #是否大小写敏感,1为非大小写敏感,默认0大小写敏感,mysql8在第一次启动就要配置好,后面更改了就会报错
    

    mysql8 中大小写敏感配置要在第一次启动前配置好

    systemctl start mysqld.service
    

    启动mysql

    1.2.5 修改初始密码

    cat /var/log/mysqld.log | grep password
    

    找到默认密码

    mysql -u root -p
    

    使用默认密码登录

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
    

    修改初始密码

    SHOW GRANTS FOR `root`;  -- 查看用户权限 
    CREATE USER `root`@`%` IDENTIFIED BY '1qaz@WSX';  -- 创建用户 
    GRANT ALL ON *.* TO `root`@`%` WITH GRANT OPTION;-- 修改用户权限
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX'; --  修改用户密码校验方式
    

    以上可能会用到的用户权限相关sql

    3. mysql主主负载

    3.1 部署好两台相同的mysql服务
    假设
    服务器A:192.168.1.1
    服务器B:192.168.1.2

    CREATE USER 'sync'@'192.168.1.2' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.2';
    

    在服务器A上创建同步账号,并添加权限

    CREATE USER 'sync'@'192.168.1.1' IDENTIFIED BY 'password';
    GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.1';
    

    在服务器B上创建同步账号,并添加权限

    3.2 配置my.cnf

    [mysqld]
    user                            = mysql #mysql使用的用户名
    bind_address                    = 0.0.0.0 #监听IP,此处不能用127.0.0.1因为需要外部机器访问
    default_authentication_plugin   = mysql_native_password
    server-id = 2 #server-id,必须是大于0的一个整数,两台服务器不能设置一样,一般一个设1,另一个设2就可以
    log_bin                         = mysql-bin #二进制日志名,最终会在/usr/local/mysql/data/中以mysql-bin.000001这种文件名形式存在,扩展名是一个编号
    binlog_format                   = mixed #混合型日志格式,具体含义可自行查询
    binlog_expire_logs_seconds      = 604800 #日志过期时间
    sync-binlog                     = 1
    innodb_flush_log_at_trx_commit  = 1
    
    # Master DB #
    #需要同步的数据库用多个binlog-do-db,不要写在一行用逗号分隔,这种情况可能会导致数据库同步状态一切正常,就是同步不了,日志也没有任何问题,根据实验发现,如果写成binlog-do-db = database1,database2
    在使用show master status以及show slave status时与下面设置方式完全一样,但就是无法同步
    binlog-do-db                    = sjy  #需要同步的数据库
    binlog-do-db                    = sjy_test  #需要同步的数据库
    #由于两个服务器都可以写数据,为了防止自增的key冲突,需要设置下面两个,increment是每次增长数,两台服务器设为2即可,offset是起始偏移,一个服务器设置为1,另一个设置为2,这样自增id在服务器A上是1、3、5这样,在服务器B上就是2、4、6不会产生冲突
    auto-increment-increment        = 2
    auto-increment-offset           = 2
    
    # Slave DB #
    replicate-do-db                 = sjy  #需要从其他服务器同步过来的数据库名
    replicate-do-db                 = sjy_test
    relay_log                       = relay-bin #中继日志名称
      
    lower_case_table_names = 1 #是否大小写敏感,1为非大小写敏感,默认0大小写敏感,mysql8在第一次启动就要配置好,后面更改了就会报错
    
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    
    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    

    server-id 两台服务器设置不同的值,一个设置1,一个设置2
    auto-increment-increment 主键增长数,两台设置相同值
    auto-increment-offset 偏移量设置不同值,一个设置1,一个设置2

    3.3 配置主从服务信息,开启服务
    服务器A为主服务时中执行

    SHOW MASTER STATUS\G
    

    查看主服务信息

    *************************** 1. row ***************************
                 File: mysql-bin.000004
             Position: 2165741
         Binlog_Do_DB: sjy,sjy_test
     Binlog_Ignore_DB: 
    Executed_Gtid_Set: 
    1 row in set (0.00 sec)
    

    记下File和Position值,在B服务器上设置,

    CHANGE MASTER TO MASTER_HOST='192.168.100.1',MASTER_USER='sync',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=2165741;
    

    MASTER_HOST 主服务器IP,即为对方服务器IP
    MASTER_USER 我们创建的同步用户
    MASTER_PASSWORD 用户密码
    MASTER_LOG_FILE 主服务器上查到的日志文件名
    MASTER_LOG_POS 主服务器上查到的日志位置

    同理,在服务器B上执行SHOW MASTER STATUS,把信息配置到服务器A上。

    start slave;
    

    两个服务器分别执行,开启slave。

    3.4 检验开启状态

    show slave status\G
    

    分别在两台服务器上执行,查看 Slave_IO_Running 和 Slave_SQL_Running 这两个值是否都为YES;
    在服务器A中修改数据,数据库B是否数据一致,在数据库B中修改数据,数据库A中是否数据一致。

    相关文章

      网友评论

          本文标题:mysql8 主主负载配置

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