zoukankan      html  css  js  c++  java
  • percona mysql server5.7基于gtid的主从复制

    配置mysql基于gtid主从复制架构
    
    一、二进制安装mysql
    
    [root@node5 data]# tar -zxf Percona-Server-5.7.21-21-Linux.x86_64.ssl101.tar.gz
    [root@node5 data]# mv Percona-Server-5.7.21-21-Linux.x86_64.ssl101 percona-server-5.7.21-21
    [root@node5 data]# mv percona-server-5.7.21-21 /usr/local/
    [root@node5 local]# cd /usr/local/
    [root@node5 local]# ln -s percona-server-5.7.21-21 mysql
    
    # 添加用户
    useradd -u 501 -G users -s /sbin/nologin -M -d /usr/local/mysql/bin mysql
    
    mkdir -p /data/mysql_data
    chown -R mysql.mysql /data/mysql_data
    
    # 编辑配置
    vim /etc/my.cnf
    
    [client]
    port                                    = 3306
    socket                                  = /tmp/mysql.sock
    
    # The MySQL server
    [mysqld]
    user                                    = mysql
    port                                    = 3306
    bind-address                            = 0.0.0.0
    socket                                  = /tmp/mysql.sock
    datadir                                 = /data/mysql_data
    pid-file                                = /data/mysql_data/mysql.pid
    
    skip-external-locking
    #memory is 16G
    #key_buffer_size = 16M
    key_buffer_size                         = 32M
    #table_open_cache = 64
    table_open_cache                         = 1024
    innodb_open_files                         = 450
    #sort_buffer_size = 512K
    sort_buffer_size                         = 2M
    #net_buffer_length = 4K
    net_buffer_length                         = 32K
    #read_buffer_size = 256K
    read_buffer_size                         = 2M
    #read_rnd_buffer_size = 4M
    read_rnd_buffer_size                         = 8M
    #myisam_sort_buffer_size = 4M
    myisam_sort_buffer_size                     = 32M
    thread_cache_size                         = 800
    query_cache_size                         = 32M
    query_cache_type                         = 1
    max_write_lock_count                         = 300
    skip-name-resolve
    wait_timeout                             = 120
    interactive_timeout                         = 120
    max_connections                         = 400
    max_connect_errors                         = 10000
    max_allowed_packet                         = 320M
    back_log                             = 1024
    log_timestamps                                          = system
    
    sync_binlog                            = 1 
    #当链接数耗尽后,通过设置别用端口,让root可以登录
    extra_max_connections                               = 2
    extra_port                            = 13306
    ##让mysql不区分大小写敏感
    lower_case_table_names                              = 1
    
    character_set_server                        = utf8mb4
    performance_schema                                              = ON
    
    #for FULLTEXT index , if your progrom used fulltext index please change the value your want.
    #ft_min_word_len = 1
    #ft_max_work_len = 10
    slave-skip-errors                         = 1062,1032
    #if the query is exec time great than 2 seconds, the query will log to slow log if slowlog is enabled.
    long_query_time                         = 0.5
    slow_query_log                             = on
    slow-query-log-file                         = /data/mysql_data/slow.log
    #skip-networking
    
    # Replication Master Server (default)
    # binary logging is required for replication
    log-bin                                = mysql-bin
    expire_logs_days                         = 8
    log_error                             = error.log
    log_warnings                             = 1
    # binary logging format - mixed recommended
    binlog_format                            = row
    #binlog_format=mixed
    relay-log                            = mysql-relay-bin
    
    # required unique id between 1 and 2^32 - 1
    # defaults to 1 if master-host is not set
    # but will not function as a master if omitted
    #server-id                               = 9662945782
    server-id =3862945782
    sql-mode                            = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
    #sync_binlog = 2
    
    
    ##### Replication #####
    replicate-ignore-db                                           = mysql
    replicate-ignore-db                                           = information_schema
    replicate-ignore-db                                           = performance_schema
    replicate-ignore-db                                           = sys
    replicate-ignore-db                                           = undolog
    replicate-ignore-db                                           = for_nagios
    replicate_wild_ignore_table                                    = mysql.%
    replicate_wild_ignore_table                                    = information_schema.%
    replicate_wild_ignore_table                                    = performance_schema.%
    replicate_wild_ignore_table                                    = sys.%
    
    log-slave-updates
    
    #skip-slave-start
    
    #skip-grant-tables
    
    ###rds-ecs,此处配置根据rds的配置来进行设置
    innodb_data_file_path                                   = ibdata1:200M:autoextend
    innodb_log_files_in_group                               = 2
    innodb_log_file_size                                    = 1572864000
    
    master-info-repository               = TABLE                    ###Slave配置需要
    relay-log-info_repository            = TABLE                    ###Slave配置需要
    binlog-format                        =ROW                       ####Slave配置需要
    gtid-mode                            = on                       ###开启GTID需要
    enforce-gtid-consistency             = true                     ###开启GTID需要
    
    
    #innodb_fast_checksum                        = false
    #innodb_page_size                        = 16384
    #innodb_log_block_size                        = 512
    
    #innodb_checksum_algorithm                    = crc32
    #innodb_log_checksum_algorithm                    = strict_crc32
    
    #####
    # Uncomment the following if you are using InnoDB tables
    innodb_data_home_dir                         = /data/mysql_data
    #innodb_data_file_path                         = ibdata1:1G;ibdata2:1G:autoextend
    innodb_log_group_home_dir                           = /data/mysql_data
    
    #innodb_undo_directory                               = /data/mysql_data/undolog/
    #innodb_undo_logs                         = 128
    #innodb_undo_tablespaces                     = 3
    
    # You can set .._buffer_pool_size up to 50 - 80 %
    # of RAM but beware of setting memory usage too high
    innodb_buffer_pool_size                     = 1G
    innodb_buffer_pool_instances                     = 1
    #innodb_additional_mem_pool_size = 8M
    
    # Set .._log_file_size to 25 % of buffer pool size
    #innodb_log_file_size                         = 256M
    innodb_log_buffer_size                         = 64M
    #innodb_log_files_in_group                     = 3
    innodb_flush_log_at_trx_commit                     = 2
    innodb_lock_wait_timeout                     = 30
    innodb_file_per_table                         = 1
    innodb_thread_concurrency                     = 4
    innodb_max_dirty_pages_pct                     = 75
    innodb_flush_method                         = O_DIRECT
    
    innodb_purge_threads                         = 4
    innodb_large_prefix                         = 1
    innodb_read_io_threads                         = 16
    innodb_write_io_threads                     = 16
    innodb_io_capacity                         = 1000
    innodb_io_capacity_max                         = 2000
    
    thread_pool_size                         = 8
    thread_handling                         = pool-of-threads
    thread_pool_oversubscribe                     = 40
    thread_pool_stall_limit                     = 100
    thread_pool_max_threads                     = 60
    
    #解释: 在启动时把热数据加载到内存。
    innodb_buffer_pool_load_at_startup                      = 1
            
    ##解释: 在关闭时把热数据dump到本地磁盘
    innodb_buffer_pool_dump_at_shutdown                     = 1
    
    
    [mysqldump]
    quick
    max_allowed_packet                         = 320M
    
    [mysql]
    no-auto-rehash
    # Remove the next comment character if you are not familiar with SQL
    #safe-updates
    
    [myisamchk]
    #key_buffer_size = 20M
    #sort_buffer_size = 20M
    key_buffer_size                         = 200M
    sort_buffer_size                         = 200M
    read_buffer                             = 2M
    write_buffer                             = 2M
    
    [mysqlhotcopy]
    interactive-timeout
    
    
    初始化MySQL数据库的数据文件路径,并且创建系统表,5.7.6及以上版本,要使用mysqld来初始化数据库
    将mysql命令加入环境变量中
    vim /etc/profile
    export PATH=/usr/local/mysql/bin:$PATH
    
    # 修改权限
    chown -R mysql.mysql /data/mysql_data
    
    [root@node5 local]# /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure --user=mysql
    
    [root@node5 local]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
    [root@node5 local]# chmod +x /etc/init.d/mysql
    
    修改启动脚本
    vim /etc/init.d/mysql
    basedir=/usr/local/mysql
    datadir=/data/mysql_data
    
    启动mysql
    /etc/init.d/mysql start
    设置root密码,默认密码为空
    mysql> set password = password('root');
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    
    mysql> flush privileges;
    
    
    二、通过gtid的方式配置mysql主从
    
    主库配置片段:
    log-slave-updates = ON
    
    master-info-repository               = TABLE                    ###Slave配置需要
    relay-log-info_repository            = TABLE                    ###Slave配置需要
    binlog-format                        =ROW                       ####Slave配置需要
    gtid-mode                            = on                       ###开启GTID需要
    enforce-gtid-consistency             = true                     ###开启GTID需要
    binlog-checksum = CRC32
    master-verify-checksum = 1
    
    
    从库配置片段:
    log-slave-updates = ON
    
    master-info-repository               = TABLE                    ###Slave配置需要
    relay-log-info_repository            = TABLE                    ###Slave配置需要
    binlog-format                        =ROW                       ####Slave配置需要
    gtid-mode                            = on                       ###开启GTID需要
    enforce-gtid-consistency             = true                     ###开启GTID需要
    skip-slave-start = true
    read_only = ON
    slave-sql-verify-checksum = 1
    relay-log = relay-log
    relay-log-index = relay-log-index
    relay-log-recovery = ON
    slave-sql-verify-checksum = 1
    
    主库添加复制用户:
    mysql> grant replication slave on *.* to 'repl'@'10.11.0.215' identified by 'replpass';
    mysql> flush privileges;
    
    查看主库与从库的GTID是否开启
    mysql> show variables like '%gtid%';
    +----------------------------------+-----------+
    | Variable_name                    | Value     |
    +----------------------------------+-----------+
    | binlog_gtid_simple_recovery      | ON        |
    | enforce_gtid_consistency         | ON        |
    | gtid_executed_compression_period | 1000      |
    | gtid_mode                        | ON        |
    | gtid_next                        | AUTOMATIC |
    | gtid_owned                       |           |
    | gtid_purged                      |           |
    | session_track_gtids              | OFF       |
    +----------------------------------+-----------+
    
    mysql> show variables like '%gtid_next%';
    +---------------+-----------+
    | Variable_name | Value     |
    +---------------+-----------+
    | gtid_next     | AUTOMATIC |
    +---------------+-----------+
    1 row in set (0.00 sec)
    
    查看服务器server_uuid
    mysql> show variables like '%uuid%';
    +---------------+--------------------------------------+
    | Variable_name | Value                                |
    +---------------+--------------------------------------+
    | server_uuid   | ea04f6f3-631c-11e8-9eac-000c29ff3eec |
    +---------------+--------------------------------------+
    1 row in set (0.00 sec)
    
    查看主服务器状态,如果Executed_Gtid_Set字段为空,则可能配置错误需要自行检查配置
    mysql> show master status;
    +------------------+----------+--------------+------------------+------------------------------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
    +------------------+----------+--------------+------------------+------------------------------------------+
    | mysql-bin.000003 |      194 |              |                  | 190a16f8-63b4-11e8-a82d-000c29ff3eec:1-2 |
    +------------------+----------+--------------+------------------+------------------------------------------+
    1 row in set (0.00 sec)
    
    
    配置从库连接至主库
    mysql> CHANGE MASTER TO MASTER_HOST='10.11.0.210',MASTER_USER='repl',MASTER_PASSWORD='replpass',MASTER_AUTO_POSITION=1;
    在从服务器上启动复制
    mysql> START SLAVE;
    启动成功后查看SLAVE的状态
    
    mysql> SHOW SLAVE STATUSG
    
    ...
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    ...
    确认 Slave_IO_Running 和 Slave_SQL_Running 两个参数都为 Yes 状态。
    
    在主服务器查看从库连接的主机信息
    
    测试GTID主从复制
    在主库(node1)实例创建一些数据,看从库是否能够正常新增
    
    
    **********
    配置mysql基于gtid一主多从方式
    node1(master) --> node5(slave) --> node2(主库指向node5,slave)
    
    在之前基于gtid的主从模式:node1(master) --> node5(slave)基础上配置
    
    添加第二个从库node2 10.11.0.212的过程:
    
    通过二进制安装好数据库my.cnf配置片段
    
    
    *********************
    log-slave-updates
    
    ###rds-ecs,此处配置根据rds的配置来进行设置
    innodb_data_file_path                                   = ibdata1:200M:autoextend
    innodb_log_files_in_group                               = 2
    innodb_log_file_size                                    = 1572864000
    
    master-info-repository               = TABLE                    ###Slave配置需要
    relay-log-info_repository            = TABLE                    ###Slave配置需要
    binlog-format                        =ROW                       ####Slave配置需要
    gtid-mode                            = on                       ###开启GTID需要
    enforce-gtid-consistency             = true                     ###开启GTID需要
    slave-sql-verify-checksum = 1
    relay-log = relay-log
    relay-log-index = relay-log-index
    relay-log-recovery = ON
    slave-sql-verify-checksum = 1
    
    *********************
    
    主库node5中添加复制用户:
    mysql> grant replication slave on *.* to 'repl'@'10.11.0.212' identified by 'replpass';
    mysql> flush privileges;
    
    node2上配置从库连接至主库
    mysql> CHANGE MASTER TO MASTER_HOST='10.11.0.215',MASTER_USER='repl',MASTER_PASSWORD='replpass',MASTER_AUTO_POSITION=1;
    在从服务器上启动复制
    mysql> START SLAVE;
    启动成功后查看SLAVE的状态
    
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 10.11.0.215
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000003
              Read_Master_Log_Pos: 3596
                   Relay_Log_File: relay-log.000003
                    Relay_Log_Pos: 3769
            Relay_Master_Log_File: mysql-bin.000003
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    
    
    看到主库的数据成功复制过来了
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | china              |
    | master1            |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    
    mysql> use master1;
    Database changed
    mysql> show tables;
    +-------------------+
    | Tables_in_master1 |
    +-------------------+
    | test1             |
    +-------------------+
    1 row in set (0.00 sec)
    
    mysql> select * from test1;
    +------+-------+
    | id   | count |
    +------+-------+
    |    1 |     1 |
    |    2 |     2 |
    |    5 |     5 |
    
    
    报错处理:
    
    看到Slave_IO_Running: Connecting一只处于连接中状态
    
    mysql> show slave statusG
    *************************** 1. row ***************************
                   Slave_IO_State: Connecting to master
                      Master_Host: 10.11.0.215
                      Master_User: repl
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: 
              Read_Master_Log_Pos: 4
                   Relay_Log_File: relay-log.000001
                    Relay_Log_Pos: 4
            Relay_Master_Log_File: 
                 Slave_IO_Running: Connecting
                Slave_SQL_Running: Yes
    
    观察日志:
    [root@node02 ~]# tail -f /data/mysql_data/error.log 
    2018-05-31T20:46:55.187975+08:00 2 [Warning] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
    2018-05-31T20:46:55.187987+08:00 2 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.
    2018-05-31T20:48:07.059454+08:00 3 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
    2018-05-31T20:48:07.062633+08:00 3 [ERROR] Slave I/O for channel '': error connecting to master 'repl@10.11.0.215:3306' - retry-time: 60  retries: 1, Error_code: 1130
    
    原来是授权用户配置错误,修改到repl@10.11.0.212:3306即可
    
    
    *****************************
    
    主从切换:
    
    
    
    ***********
    
    1.锁定原主数据写操作
    原主库中操作:
    mysql> flush tables with read lock;
    Query OK, 0 rows affected (0.01 sec)
    
    2.在从服务器中执行stop slave io_thread,用show processlist检查,查看状态是否是Has read all relay log,表示更新完成.
    从服务器执行
    mysql> show processlist;
    +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+-----------+---------------+
    | Id | User        | Host      | db   | Command | Time | State                                                  | Info             | Rows_sent | Rows_examined |
    +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+-----------+---------------+
    |  4 | system user |           | NULL | Connect |  578 | Slave has read all relay log; waiting for more updates | NULL             |         0 |             0 |
    | 27 | root        | localhost | NULL | Query   |    0 | starting                                               | show processlist |         0 |             0 |
    +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+-----------+---------------+
    
    
    3.在新的主服务器上(原从服务器)执行stop slave,reset master命令,重置成主数据库
    
    新的主库上添加复制用户
    mysql> grant replication slave on *.* to 'repl'@'10.11.0.212' identified by 'replpass';
    mysql> flush privileges;
    
    mysql> stop slave;
    mysql> reset master;
    mysql> reset slave all;    -- 清除同步信息
    
    4.删除新的主服务器数据库目录中的master.info和relay-log.info文件,否则下次重启时还会按照从服务器来启动.
    
    5.原主库切换到从库
    # 解锁
    mysql> unlock tables;
    
    mysql> CHANGE MASTER TO MASTER_HOST='10.11.0.212',MASTER_USER='repl',MASTER_PASSWORD='replpass',MASTER_AUTO_POSITION=1;
    Query OK, 0 rows affected, 2 warnings (0.01 sec)
    mysql> start slave;
    
    
    5.修改主从服务器的配置(下次重启后参数改变)
    主库配置片段:
    log-slave-updates = ON
    
    master-info-repository               = TABLE                    ###Slave配置需要
    relay-log-info_repository            = TABLE                    ###Slave配置需要
    binlog-format                        =ROW                       ####Slave配置需要
    gtid-mode                            = on                       ###开启GTID需要
    enforce-gtid-consistency             = true                     ###开启GTID需要
    binlog-checksum = CRC32
    master-verify-checksum = 1
    
    
    从库配置片段:
    log-slave-updates = ON
    
    master-info-repository               = TABLE                    ###Slave配置需要
    relay-log-info_repository            = TABLE                    ###Slave配置需要
    binlog-format                        =ROW                       ####Slave配置需要
    gtid-mode                            = on                       ###开启GTID需要
    enforce-gtid-consistency             = true                     ###开启GTID需要
    skip-slave-start = true
    read_only = ON
    slave-sql-verify-checksum = 1
    relay-log = relay-log
    relay-log-index = relay-log-index
    relay-log-recovery = ON
    slave-sql-verify-checksum = 1
    
    
    报错的处理:
    mysql> start slave;
    ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
    
    解决:
    mysql> reset slave;
    Query OK, 0 rows affected (0.00 sec)
    mysql> start slave;

    配置percona mysql5.7主从,日志同步的方式:
    注意server-id必须不同

    1.主库master上面配置repl复制同步用户
    mysql> CREATE USER 'repl'@'10.11.0.212' IDENTIFIED BY 'replpass';
    mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.0.212';

    记录主库状态:
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 | 615 | | | |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)


    2.从库配置
    放在一行执行方便
    CHANGE MASTER TO MASTER_HOST='10.11.0.210', MASTER_USER='repl', MASTER_PASSWORD='replpass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=615;
    启动从服务器复制线程

    mysql> START SLAVE;
    Query OK, 0 rows affected (0.00 sec)
    查看复制状态
    mysql> show slave statusG;
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 10.11.0.210
    Master_User: repl
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000001
    Read_Master_Log_Pos: 615
    Relay_Log_File: mysql-relay-bin.000002
    Relay_Log_Pos: 320
    Relay_Master_Log_File: mysql-bin.000001
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Replicate_Do_DB:
    Replicate_Ignore_DB: mysql,information_schema,performance_schema,mysql,information_schema,performance_schema

    Slave_SQL_Running: Yes


    数据库分析工具percona-toolkit
    [root@node1 data]# yum localinstall -y percona-toolkit-2.2.19-1.noarch.rpm

  • 相关阅读:
    四月⑨日
    4月⑦日
    4月6日
    四月⑧日
    第一天上课
    modelsim的do文件
    SCCB协议
    FPGA之VGA控制
    FPGA常用术语
    乘法器之六(硬件乘法器)
  • 原文地址:https://www.cnblogs.com/reblue520/p/9247563.html
Copyright © 2011-2022 走看看