zoukankan      html  css  js  c++  java
  • Centos7下mysql5.7.22主从配置

    一:服务器配置

      1.1修改root密码:

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

      1.2添加远程登陆用户:

        GRANT ALL PRIVILEGES ON *.* TO 'abc'@'%' IDENTIFIED BY 'xxxx' WITH GRANT OPTION; 

      1.3统一默认编码:

        vim /etc/my.cnf 在 [mysqld]下添加编码配置:

    [mysqld]
    character_set_server=utf8
    init_connect='SET NAMES utf8'

    二:主从配置(主):

      2.1vim /etc/my.cnf 在 [mysqld]下添加:

    #要给从机同步的库
    binlog-do-db=test
    #不给从机同步的库(多个写多行)
    binlog-ignore-db=mysql
    binlog-ignore-db=information_schema
    binlog-ignore-db=performance_schema
    binlog-ignore-db=sys
    #自动清理 7 天前的log文件,可根据需要修改
    expire_logs_days=7
    # 启用二进制日志
    log-bin=mysql-bin
    # 服务器唯一ID,一般取IP最后一段
    server-id=101
    

      2.2 开启log_bin 在 [mysqld]下添加:

    log-bin                 = mysql-bin
    server-id               = 072
    

      重启服务:

        systemctl restart mysqld

      查看是log_bin否启动:

        mysql -u root -p

    mysql> show variables like '%log_bin%';
    +---------------------------------+---------------------------------------+
    | Variable_name                   | Value                                 |
    +---------------------------------+---------------------------------------+
    | log_bin                         | ON                                    |
    | log_bin_basename             | /usr/local/mysql/data/mysql-bin       |
    | log_bin_index                 | /usr/local/mysql/data/mysql-bin.index |
    | log_bin_trust_function_creators | OFF                                   |
    | log_bin_use_v1_row_events       | OFF                                   |
    | sql_log_bin                     | ON                                    |
    +---------------------------------+---------------------------------------+
    6 rows in set (0.01 sec)
                                       
    

      2.3重启服务器

        reboot

      2.4建立备份账号并授权

        mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY 'xxxx';

        mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by 'xxxx';

        刷新权限列表:

        flush privileges;

        取消用户授权:

        revoke all on *.* from backup;

      2.5查询主服务器的状态: 
        show master status; 

    mysql> show master status;
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    | mysql-bin.000002 |      735 | test01       | mysql,information_schema,performance_schema,sys |                   |
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    1 row in set (0.00 sec)
    

    三:主从配置(从):

      3.1拷贝主mysql的my.cnf文件到从服务器,替换从my.cnf,并修改如下配置:

        scp /etc/my.cnf root@192.168.x.x:/etc/my.cnf

        server-id = 2

        加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。

        read_only = 1

        master_info_repository=TABLE

        relay_log_info_repository=TABLE

      3.2配置从mysql:

    change master to master_host='x.x.x.x',master_port=3306,master_user='backup',master_password='xxx',master_log_file='mysql-bin.000002',master_log_pos=735;
    

        注!!!语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户,“120”无单引号(此处的735就是show master status 中看到的position的值,这里的mysql-bin.000002就是file对应的值)。

         如报错:

          ERROR 29 (HY000): File '/var/log/mysql-relay-index.index' not found (Errcode: 13 - Permission denied)

         编辑my.cnf文件,把log文件集中到/var/log/mysql目录:

    [mysqld]
    relay_log                   = /var/log/mysql/mysql-relay-bin
    relay_log_index             = /var/log/mysql/mysql-relay-index
    log_error                   = /var/log/mysql/mysql-error.err
    

        修改/var/log/mysql目录权限:

          chown -R mysql:mysql /var/log/mysql/

        重启mysql

          systemctl restart mysqld

        进入mysql,再次运行change配置

      3.3正确执行后启动Slave同步进程

        mysql> start slave;

        查看从服务器状态 

        show slave status G

         G后不加;号

         输出:

          Slave_IO_Running: No

          Slave_SQL_Running: Yes

        两个必须为Yes才是正确启动!!!

        查看log文件:

          vim /var/log/mysql/mysql-error.err

           2019-01-16T02:17:02.480802Z 2 [ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593

         因从虚拟机为主安装mysql后拷贝生成,造成主从mysql UUID值相同,需要修改为不同值:

          找到data文件夹下的auto.cnf文件,修改里面的uuid值,保证各个db的uuid不一样,重启db即可

         重启mysql

          systemctl restart mysqld

        再次查看从服务器状态:

          mysql> show slave status G

    mymsql> show slave status G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting to reconnect after a failed registration on master
                      Master_Host: 192.168.10.11
                      Master_User: backup
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000002
              Read_Master_Log_Pos: 735
                   Relay_Log_File: mysql-relay-bin.000003
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: mysql-bin.000002
                 Slave_IO_Running: Connecting
                Slave_SQL_Running: Yes
    

        还是报错:

          Slave_IO_Running: Connecting

         查看log文件:

          2019-01-16T02:53:53.094695Z 7 [ERROR] Slave I/O for channel '': Master command COM_REGISTER_SLAVE failed: Access denied for user 'backup'@'%' (using password: YES) (Errno: 1045), Error_code: 1597

        重新赋权:

          mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by 'xxxx';

        切记要刷新:

          flush privileges;

        mysql> stop slave;

        mysql> start slave;

        mysql> show slave status G

    mysql> show slave status G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.100.72
                      Master_User: wxjcbackup
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000002
              Read_Master_Log_Pos: 2708
                   Relay_Log_File: mysql-relay-bin.000006
                    Relay_Log_Pos: 320
            Relay_Master_Log_File: mysql-bin.000002
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    

      如果show slave status G

        报错:

        Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'

    Slave_IO_Running: No
    Slave_SQL_Running: Yes
    ....
    Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
    

      在主mysql下运行:

    mysql> show master status;
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    | mysql-bin.000004 |      154 | test01       | mysql,information_schema,performance_schema,sys |                   |
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    1 row in set (0.00 sec)
    

      在从mysql下运行:

    mysql> show master status;
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB                                | Executed_Gtid_Set |
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    | mysql-bin.000006 |      154 | test01       | mysql,information_schema,performance_schema,sys |                   |
    +------------------+----------+--------------+-------------------------------------------------+-------------------+
    1 row in set (0.00 sec)
    

      两个file编号不一致,以主为准,重新定位:

      stop slave;

    change master to master_host='x.x.x.x',master_port=3306,master_user='backup',master_password='xxx',master_log_file='mysql-bin.000004',master_log_pos=154;
    

      start slave;

      show slave status;

    mysql> show slave status G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 192.168.10.11
                      Master_User: backup
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 154
                   Relay_Log_File: mysql-relay-bin.000002
                    Relay_Log_Pos: 320
            Relay_Master_Log_File: mysql-bin.000004
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    

    四:测试同步:

      查看主服务器数据库:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | testdb             |
    +--------------------+
    5 rows in set (0.01 sec)
    

      主库新建数据库:

    mysql> create database testdb02;
    Query OK, 1 row affected (0.00 sec)
    

      从库查看数据库同步情况:

    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | testdb             |
    | testdb01           |
    | testdb02           |
    +--------------------+
    7 rows in set (0.00 sec)
    

      

       关闭掉主数据库的读取锁定 

       unlock tables;

       show databases;

       use test;

       show tables;

        

     感谢:

    https://blog.csdn.net/happy_pinocchio/article/details/79592422

    五:重新做主从,完全同步 (适用于主库从库的数据相差较大;要求数据完全统一的情况 )

      5.1 先进入主库,进行锁表,此处锁定为只读状态,防止数据写入

        (可选,因如有数据库备份,可直接利用备份)

        flush tables with read lock;

      5.2 进行数据备份,把数据备份为.sql的文件

        (可选,因如有数据库备份,可直接利用备份)

        切换到mysql用户

        su mysql

        mysqldump -uroot -p‘密码’  --all-databases > /data/mysql/backup/mysql.back.sql

        如报错:

          先查看vim /etc/profile是否添加mysql环境变量,如没有则添加

          export PATH=$PATH:/usr/local/mysql/bin
          export PATH

      5.3 进入主库,进行解锁

        (可选,因如有数据库备份,可直接利用备份)

        unlock tables;

      5.4 把mysql的备份文件传输到从库服务器上

        (位置任意,但要能找到)

        scp -r /data/mysql/backup/mysql.bask.sql root@mysql02:/data/mysql/backup/

      5.5 进入从库,停止从库的状态

        stop slave;

         清除slave上的同步位置,删除所有旧的同步日志,使用新的日志重新开始.(使用前先停止slave服务)

        reset slave;(可选)

      5.6 在从库中导入数据备份

        source /data/mysql/backup/mysql.back.sql ;

        或

        mysql -uroot -p‘....’  database -f < /data/mysql/backup/mysql.bask.sql

         (-f 为跳过错误的Sql,继续往下执行,可不加)

      5.7 重新设置从库同步

        change master to master_host = '主库的IP’, master_user = '设置主从时设定的主库的用户', master_port=主库的端口, master_password='主库设定的密码', master_log_file = 'mysqld-bin.xxxxxx', master_log_pos=xxxx;

      注意: master_log_file与master_log_pos 是主库show master status信息里的| File与Position

      5.8 重新开启从库同步

        start slave; 

      5.9 查看同步状态

        mysql> show slave statusG

        查看:

          Slave_IO_Running: Yes

          Slave_SQL_Running: Yes

    感谢:

    https://blog.csdn.net/GX_1_11_real/article/details/80658527

  • 相关阅读:
    用于表示socket的结构体
    Parcelable与Serializable接口的用法和区别
    java类初始化顺序
    孙卫琴java面向对象编程学习笔记
    linux档案权限
    js弹出模态与非模态页面
    ubuntu开启默认的root用户
    java开发实战学习笔记1
    JQuery ajax回调函数
    hadoop命令
  • 原文地址:https://www.cnblogs.com/jackyzm/p/10273245.html
Copyright © 2011-2022 走看看