zoukankan      html  css  js  c++  java
  • mysql innodb cluster 无感知集群

           MySQL 8.0.12 innodb cluster 高可用集群部署运维管理手册

    Innodb cluster 原理介绍

    Innodb cluster  利用组复制的 pxos 协议,保障数据一致性,组复制支持单主模式和多主模式,

    本文推荐的高可用架构为单主模式下,基于mysqlrouter的 innodb cluster:

    搭建步骤

    系统:centos 7.5

    Mysql:8.0.12   二进制包

    Mysqlshell: 8.0.12  rpm 包

    Mysql router: 8.0.12  二进制包

    架构:  

    192.168.181.101  my-manager1          Keepalived、MySQL-shell、MySQL-Router、MySQL-client

    192.168.181.102  my-manager2          Keepalived、MySQL-shell、MySQL-Router、MySQL-client

    192.168.181.103  mysql-1                MySQL服务端、MySQL-shell

    192.168.181.104   mysql-2                MySQL服务端、MySQL-shell

    192.168.181.105   mysql-3                MySQL服务端、MySQL-shell

    准备工作:

    修改/etc/hosts (5个节点都要做), 要和主机名一致

    172.16.50.191  uatvfc-db-route01

    172.16.50.192  uatvfc-db-route02

    172.16.50.193  uatvfc-db-route03

    172.16.50.197  uatvfc-db-data01

    172.16.50.198  uatvfc-db-data02

    172.16.50.199  uatvfc-db-data03

    1. 操作系统的预处理和优化:

    yum -y install gcc glibc libaio

    防火墙和selinux关闭:

    (1)、关闭SElinux

                                             setenforce 0

                                              修改/etc/selinux/config

                                              vim /etc/selinux/config

                                              SELINUX=disabled

    (2)、关闭防火墙

                                              systemctl stop firewalld

                                              systemctl disable firewalld

    sysctl.conf 优化:

    cat>>/etc/sysctl.conf <<EOF

    fs.aio-max-nr = 1048576

    fs.file-max = 681574400

    kernel.shmmax = 137438953472

    kernel.shmmni = 4096

    kernel.sem = 250 32000 100 200

    net.ipv4.ip_local_port_range = 9000 65000

    net.core.rmem_default = 262144

    net.core.rmem_max = 4194304

    net.core.wmem_default = 262144

    net.core.wmem_max = 1048586

    EOF

    limit 优化:

    cat>>/etc/security/limits.conf <<EOF

    mysql soft nproc 65536

    mysql hard nproc 65536

    mysql soft nofile 65536

    mysql hard nofile 65536

    EOF

    cat>>/etc/pam.d/login <<EOF

    session required /lib/security/pam_limits.so

    session required pam_limits.so

    EOF

    cat>>/etc/profile<<EOF

    if [ $USER = "mysql" ]; then

    ulimit -u 16384 -n 65536

    fi

    EOF

    source /etc/profile

    安装mysql(sql 节点)

    User add mysql

    环境变量:

    0

    安装mysql 软件(sql 节点):

    cd /data

    tar -xzvf mysql-8.0.12-el7-x86_64.tar.gz  -C /usr/local

    mv /usr/local/mysql-8.0.12-el7-x86_64 /usr/local/mysql

    chown -R  mysql.mysql  /usr/local/mysql

    初始化mysql(一个主节点)

    mkdir -p /data/mysql_3310_vfc/{data,log,binlog,conf,tmp}

    chown -R mysql.mysql /data/mysql_3310_vfc

    mkdir -p /data/mysql_3320_vfc/{data,log,binlog,conf,tmp}

    chown -R mysql.mysql /data/mysql_3320_vfc

    mkdir -p /data/mysql_3330_vfc/{data,log,binlog,conf,tmp}

    chown -R mysql.mysql /data/mysql_3330_vfc

    参数文件

    su - mysql

    Vim  /data/mysql_3310_vfc/conf/my.cnf

    [mysqld]

    lower_case_table_names          = 1

    user                            = mysql

    server_id                       = 197

    port                            = 3310

    default-time-zone = '+08:00'

    enforce_gtid_consistency        = ON

    gtid_mode                       = ON

    binlog_checksum                 = none

    default_authentication_plugin   = mysql_native_password

    datadir                         = /data/mysql_3310_vfc/data

    pid-file                        = /data/mysql_3310_vfc/tmp/mysqld.pid

    socket                          = /data/mysql_3310_vfc/tmp/mysqld.sock

    tmpdir                          = /data/mysql_3310_vfc/tmp/

    skip-name-resolve               = ON

    open_files_limit                = 65535 # open_files_limit does not take effect

    table_open_cache                = 2000

    #################innodb########################

    innodb_data_home_dir            = /data/mysql_3310_vfc/data

    innodb_data_file_path           = ibdata1:512M;ibdata2:512M:autoextend

    innodb_buffer_pool_size = 6000M

    innodb_flush_log_at_trx_commit = 1

    innodb_io_capacity = 600

    innodb_lock_wait_timeout = 120

    innodb_log_buffer_size = 8M

    innodb_log_file_size = 200M

    innodb_log_files_in_group = 3

    innodb_max_dirty_pages_pct = 85

    innodb_read_io_threads = 8

    innodb_write_io_threads = 8

    innodb_thread_concurrency = 32

    innodb_file_per_table

    innodb_rollback_on_timeout

    innodb_undo_directory           = /data/mysql_3310_vfc/data

    innodb_log_group_home_dir       = /data/mysql_3310_vfc/data

    ###################session###########################

    join_buffer_size = 8M

    key_buffer_size = 256M

    bulk_insert_buffer_size = 8M

    max_heap_table_size = 96M

    tmp_table_size = 96M

    read_buffer_size = 8M

    sort_buffer_size = 2M

    max_allowed_packet = 64M

    read_rnd_buffer_size = 32M

    ############log set###################

    log-error                       = /data/mysql_3310_vfc/log/mysqld.err

    log-bin                         = /data/mysql_3310_vfc/binlog/binlog

    log_bin_index                   = /data/mysql_3310_vfc/binlog/binlog.index

    max_binlog_size                 = 500M

    slow_query_log_file             = /data/mysql_3310_vfc/log/slow.log

    slow_query_log                  = 1

    long_query_time                 = 10

    log_queries_not_using_indexes   = ON

    log_throttle_queries_not_using_indexes  = 10

    log_slow_admin_statements       = ON

    log_output                      = FILE,TABLE

    master_info_file                = /data/mysql_3310_vfc/binlog/master.info

    ##########################mgr set##############################

    mysqlx_port=33102

    mysqlx_socket=/data/mysql_3310_vfc/tmp/mysqlx.sock

    loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"

    loose-group_replication_start_on_boot=off

    loose-group_replication_local_address= "172.16.50.197:33101"

    loose-group_replication_group_seeds= "172.16.50.197:33101,172.16.50.198:33101,172.16.50.199:33101"

    loose-group_replication_bootstrap_group= off

    loose-group_replication_ip_whitelist="172.16.50.0/24"

    loose-group_replication_single_primary_mode = on

    大写的注意: 多主模式存在很多限制和不确定性问题,不建议使用。具体原因和读写分离解决方案,看下文

    单主模式和多主模式注意

    多主模式下:

    loose-group_replication_single_primary_mode = off

     操作流程:业务端连接IP处理 -> GROUP内成员逐个依次主动退出GROUP (全部退出才行)-> 关闭 group_replication_single_primary_mode参数-> 逐个启动GROUP内的SERVER

    Set global group_replication_single_primary_mode=off

    初始化部署:

    mysqld   --defaults-file=/data/mysql_3310_vfc/conf/my.cnf  --initialize  --user=mysql             日志中密码:8?_BO,8k.+DX

    mysqld   --defaults-file=/data/mysql_3320_vfc/conf/my.cnf  --initialize  --user=mysql             日志中密码:JN&MiMtb5hkj

    mysqld   --defaults-file=/data/mysql_3330_vfc/conf/my.cnf  --initialize  --user=mysql             日志中密码:v+-/pcu)M3zo

    设置密码:(启动数据库)

    mysqladmin  --defaults-file=my.cnf   password  'your password';

    mysql -uroot -p -S /data/mysql_3310_vfc/tmp/mysql.sock

    mysql -uroot -p -S /data/mysql_3320_vfc/tmp/mysql.sock

    mysql -uroot -p -S /data/mysql_3330_vfc/tmp/mysql.sock

    alter user root@’localhost’ identified by  'your password';

    进入数据库

    mysql -uroot -p -S /data/mysql_3306_test/tmp/mysqld.sock

    创建本地用户,这些root 用户都是为了让集群内的机器可以访问

    create user root@'127.0.0.1' identified by 'your password';

    GRANT all ON *.* TO `root`@`127.0.0.1` WITH GRANT OPTION;

    create user root@'172.16.50.197' identified by 'your password';

    create user root@'172.16.50.198' identified by 'your password';

    create user root@'172.16.50.199' identified by 'your password';

    create user root@'172.16.50.191' identified by ‘your password’';

    create user root@'172.16.50.192' identified by 'your password’;

    create user root@'172.16.50.193' identified by ’your password‘;

    将实例复制拷贝到其他节点:

    关闭主库节点

    打包

    传递

    解压

    在做增加从库的复制是,已经对从库做了操作,比如增加账号等,在最开始操作时可以让其不记录日志

    SET SQL_LOG_BIN=0;
    DDL语句;
    DML语句;
    SET SQL_LOG_BIN=1;

    注意修改 server-id 和删掉 data里面的auto.conf

    安装mysql shell  和route

    rpm -ivh mysql-shell-8.0.11-1.el7.x86_64.rpm

    rpm -ivh mysql-router*.rpm  

    路由节点:这里有个小技巧,官方建议将路由节点部署在应用端,这样,应用可以直接使用  app_user@'127.0.0.1‘这样的用户进行访问

    配置集群

    使用mysql命令

    (1)、检查并配置实例(每个mysql节点)

    mysqlsh  --log-level=DEBUG3    日志位置  ~/.mysqlsh/mysqlsh.log 

    检查实例

    dba.configureLocalInstance('root@127.0.0.1:3310');

    dba.chekInstanceConfiguration('root@127.0.0.1:3310')

    (2)、创建cluster集群(确认每个SQL节点的实例都完成上述实例配置并且验证成功)

    在任意一台mysql实例节点执行以下命令:

    mysqlsh

    shell.connect('root@172.16.50.197:3310')

    var cluster = dba.createCluster('qwCluster1');

    如果创建成功输出的信息中会有类似“Cluster successfully created.”的语句

     

    将另外两个节点加入到Cluster集群中

    cluster.addInstance('root@172.16.50.198:3310');

    cluster.addInstance('root@172.16.50.199:3310');

    cluster.addInstance('root@172.16.50.198:3320');

    cluster.addInstance('root@172.16.50.199:3320');

    cluster.addInstance('root@172.16.50.198:3330');

    cluster.addInstance('root@172.16.50.199:3330');

    集群验证

    问题

    1. 关闭super_read_only  这个要手动,不然会报错
    2. 主节点:

    如何重置实验环境

    dba.dropMetadataSchema()  清空集群

    mysql> stop group_replication;

    mysql> reset master;               (清空日志,确保和从库的表没有冲突奥,)

    mysql> reset slave

    1. 其他节点(主要清理和主库的主从信息, 确保主库和从库的表没有冲突奥)

    mysql> stop group_replication;

    mysql> reset master;

    mysql> reset slave

    主机名和 /etc/hosts中名字不一致 怎么办

    [Repl] Slave I/O for channel 'group_replication_recovery': error connecting to master 'mysql_innodb_cluster_r0430970923@mysql3:3306' - retry-time: 60  retries: 1, Error_code: MY-002005

    [ERROR] [MY-011582] [Repl] Plugin group_replication reported: 'There was an error when connecting to the donor server. Please check that group_replication_recovery channel credentials and all MEMBER_HOST column values of performance_schema.replication_group_members table are correct and DNS resolvable.'

    [ERROR] [MY-011583] [Repl] Plugin group_replication reported: 'For details please check performance_schema.replication_connection_status table and error log messages of Slave I/O for channel group_replication_recovery.'

    这个问题郁闷了我很久,

    Hostname 是

    mysql4 

    mysql5

    mysql6

          而我在 /etc/hosts中是

    192.168.181.103  mysql-1

    192.168.181.103  mysql-2

    192.168.181.103  mysql-3

    主库的日志应用卡在某个位置无法应用到从库,

    [ERROR] [MY-010586] [Repl] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'binlog.000007' position 151

    [ERROR] [MY-010584] [Repl] Slave SQL for channel 'group_replication_applier': Error executing row event: 'Unknown database 'mysql_innodb_cluster_metadata'', Error_code: MY-001049

    重建master reset master

    组复制的限制(也是PXC 的限制)

    1. 事物锁缺失问题:

    组复制建议,事物隔离级别,read commit

    1. 序列化隔离级别:多主模式不支持
    2. 并发DDL和DML: 多主模式下,不支持 一边对一个表进行DDL,另一边进行更新,这样对于DDL在其他实例上操作有未检出的风险
    3. 外键级联约束:多主模式下,多级外键依赖对引起多级操作, 因此可能导致未知冲突,建议打开 group_replication_enforce_update_everywhere_checks=ON
    4. 大事物,超过5秒未提交,会导致组通信失败,
    5. 多主模式下:select * for update 会导致 死锁。因为这个锁并非全组共享。
    6. 部分复制不支持:组复制下,设置部分复制,会过滤事物,导致组事物不一致。
    7. Mysql 8.0.11  group_replication_enforce_update_everywhere_checks=ON 多主模式下不支持。
    8. 停止复制的情况下,某个节点执行命令后再启动,会因为本地有私有事物,无法加入集群。需要全局 reset master 重新开始集群复制。

    Innodb cluster 集群运维

    运维命令

    组复制

    这部分内容主要涉及到几个系统表格,有点类似于 SQL SERVER中的DMV视图,详见下表。

    库名

    表名

    type

    description

    performance_schema

    replication_group_members

    重要,常用

    查看GROUP成员。

    performance_schema

    replication_group_member_stats

    重要,常用

    当前SERVER在GROUP中的同步情况,查看applier通道的同步情况。

    performance_schema

    replication_connection_stats

    重要,常用

    当前server中各个通道的使用情况,applier通道是一定有显示,recovery通道看是否使用过,如果有则显示,没有则不显示。

    performance_schema

    replication_applier_stats

    重要,常用

    当前server中各个通道是否启用。

    performance_schema

    global_status

    重要,常用

    单主模式下,可以查看当前主库是哪个。

    performance_schema

    replication_applier_configuration

    不常用,了解即可

     

    performance_schema

    replication_applier_status_by_coordinator

    不常用,了解即可

     

    performance_schema

    replication_applier_status_by_worker

    不常用,了解即可

     

    performance_schema

    replication_connection_configuration

    不常用,了解即可

     

    Mysql

    slave_master_info

    重要,不常用

    设置了master_info_repository=TABLE,所以master的相关信息会存储在这个表格。
    如果使用GROUP中的SERVER备份数据库,恢复到时候,注意要清理这个表格。

    Mysql

    slave_relay_log_info

    重要,不常用

    设置了relay_log_info_repository=TABLE,所以master的相关信息会存储在这个表格。
    如果使用GROUP中的SERVER备份数据库,恢复到时候,注意要清理这个表格。

    l  组复制成员

    select * from performance_schema.replication_group_members;

    l  组复制状态

    select * from performance_schema.global_status where variable_name like '%group%';

    单主模式下主库是哪个

    SELECT * FROM performance_schema.replication_group_members;

    SELECT * FROM performance_schema. global_status;

    检查数据库是否正常提供读写服务 

    show global variables like 'super%';

    SELECT * FROM performance_schema.replication_group_members;

    如果super_read_only是启动的,那么该成员仅提供读服务;

    如果super_read_only是关闭的,并且 replication_group_members 中正常的成员n 满足 2n+1 > 整个GROUP成员个数,并且该成员的 member state是online,则该成员可提供读写服务。

    检查数据库是否复制出现问题

    可以通过表格replication_group_members ,replication_group_member_stats ,replication_connection_stats ,replication_applier_stats 查看

    重点注意各个 组成员的 ERROR LOG详细信息,因为报错描述最清楚都在这里了。

    组复制的启动关闭

    # 在启动第一个节点时

    SET GLOBAL group_replication_bootstrap_group=ON;   #表示本节点作为组复制的起始节点

    START GROUP_REPLICATION;                         #开启组复制

    SET GLOBAL group_replication_bootstrap_group=OFF;     # 关闭组复制作为起始节点

    # 启动其他节点

    START GROUP_REPLICATION;

    #关闭组复制

    stop group replication

    Mysql shell

    进入mysqlshell ,

    mysqlsh --log-level=debug3    

    dba.help() 看到所有支持的命令:

    The following functions are currently supported.

     - checkInstanceConfiguration      校验实例配置

     - configureInstance               配置实例集群

     - configureLocalInstance          配置本地实例  8.0.11以后放弃了

     - createCluster                   创建集群.

     - dropMetadataSchema              删除集群.

     - getCluster                      提取cluster 从元数据中

     - rebootClusterFromCompleteOutage 当集群成员都OFFLINE 可以启动起来.

    e.g. dba.help('configureInstance')

    #连接某个节点

    shell.connect('root@192.168.181.103:3306')

    #获取集群信息

    var cluster = dba.getCluster()    

    cluster.status()                  #集群状态查看

    创建集群

    var cluster = dba.createCluster('qwCluster')

    cluster.describe();

    使用一个存在的组复制创建集群

     var cluster = dba.createCluster('qwCluster', {adoptFromGR: true});

    删除集群信息(最后使用)

    dba.dropMetadataSchema()

          

    移调实例

    cluster.removeInstance('root@localhost:3310')

     

    cluster.rejoinInstance()

      

    检查实例是否可以配置为集群节点

    cluster.checkInstanceState('root@127.0.0.1:3306')

          

    配置集群的某个实例

    dba.configureInstance('root@192.168.181.103:3306',{mycnfPath:'/data/mysql_3306_test/conf/my.cnf',clusterAdmin:'cadmin@mysql-1%',clusterAdminPassword:'fangfang'})

    集群全部关闭后重启:

    var cluster = dba.rebootClusterFromCompleteOutage();

    Mysql 路由

    Innodb cluster环境下的mysqlrouter 的配置

    官网说,如果配置了innodbcluster 请物自己配置 集群信息

    mysqlrouter --bootstrap root@mysql3:3306 --user=mysqlrouter

    设置开机启动

    Systemctl enable mysqlrouter

    Systemctl start mysqlrouter

    router是否轮训的访问mysql

    在远端访问路由执行命令

    mysql -uroot -p  -h192.168.181.101 -P6446 -e "select @@hostname";

    可以看到访问的路径是轮训的

    l  (单主模式)

    l  (多主模式)

    破坏性测试

    1集群所有节点全部宕机

    将所有节点全部关机,重启后

    1. 开启所有数据库节点         mysqld_safe –defaults-file=/data/mysql_3306_test/conf/my.cnf &
    2. 找到 super_read_only=off 的节点就是最后的主节点   
    3. 在主节点执行,如下命令,就是先将本节点作为组复制的起始节点。

    SET GLOBAL group_replication_bootstrap_group=ON;

    START GROUP_REPLICATION;

    SET GLOBAL group_replication_bootstrap_group=OFF;

    所有节点全部关闭的情况下,宕机情况下:

    var cluster = dba.rebootClusterFromCompleteOutage(‘qwCluster1’);   

    启动一个节点,然后其他节点重启自动加入

    1. 观看日志,连接mysqlsh

    mysqlsh  --log-level=debug3

    2集群主节点关闭

    主节点关闭,会立即切换一个从节点为主库,mysqlroute 无感知

    启动新的节点,会自动恢复复制状态,无需关心。

    集群从节点关闭

    从节点关闭,不影响读写,重新启动数据库后自动恢复同步。

    集群丢失节点

    等同于,有一个节点已经挂掉,无法启动。

    此时需要添加节点

    添加节点

    备份

    Mysqlbackup 介绍

    mysqlbackup是一个热备份工具、也就是说它不像mysqldump那样给表上一个全局锁,由于mysqldump上了这个锁,所以就造成客户端只能对数据库进行读操作不能写,这也就是称mysqldump为温备份的原因。但是mysqlbackup真的有这么吊吗?答案是并没有。对于innodb引擎的表mysqlbackup 热备的;但是对于非innodb表mysqlbackup就只能温备了,原因是这类引擎不支持事务也就是说不能通过事务日志来保证备份的一致性,所以就只能给表加上一个全局锁来解决了。为了得到一致的备份mysqlbackup要不停的去追踪mysql数据库的sln号,也就是说mysqlbackup要执行备份那么它一定要连接上数据库。mysqlbackup对数据库的备份是通过复制文件的方式进行的,也就是说mysqlbackup要和数据库在同一台机器上。

    安装 mysqlbackup

    Mysqlbackup 是企业版mysql中的,但可以拿来使用,登录oracle云下载,搜索mysql backup,下载二进制文件

    mysql-commercial-backup-8.0.11-linux-glibc2.12-x86_64.tar.gz

    传到主机上并解压,

    会有 bin  和lib 文件夹,将其中的文件拷贝到 /usr/local/mysql 对应的目录中, 这里要把 软连接,库全部拷贝的,不然会报错

    备份用户

    (官方指导命令)

    CREATE USER 'mysqlbackup'@'localhost' IDENTIFIED BY 'new-password';

    GRANT RELOAD ON *.* TO 'mysqlbackup'@'localhost';

    GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO 'mysqlbackup'@'localhost';

    GRANT CREATE, INSERT, SELECT, DROP, UPDATE ON mysql.backup_history TO 'mysqlbackup'@'localhost';

    GRANT REPLICATION CLIENT ON *.* TO 'mysqlbackup'@'localhost';

    GRANT SUPER ON *.* TO 'mysqlbackup'@'localhost';

    GRANT PROCESS ON *.* TO 'mysqlbackup'@'localhost';

    GRANT ALTER ON mysql.backup_history TO 'mysqlbackup'@'localhost';

    GRANT LOCK TABLES, SELECT, CREATE, DROP, FILE ON *.* TO 'mysqlbackup'@'localhost';

    GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_sbt_history TO 'mysqlbackup'@'localhost';

    全量备份

    mysqlbackup --user=mybackup --password=131417 --backup-image=/data/backup/mysql_server.mbi --backup-dir=/data/backup/temp backup-to-image –with-timestap
    mysqlbackup –backup-dir=/data/backup/tmp –socket=/data/mysql_3306_test/tmp/mysql.sock –user=root –password=NTg1Z@mYxZjdhZWI –backup-image=/data/backup/full_20180718.bki  --with-timestap backup-to-image
    mysqlbackup --backup-dir=/backups --backup-image=- backup-to-image > /backup/mybackup.mbi

        --user:用户名。

        --password:密码。

        --port:端口,默认值为3306。

        --backup-dir:可以看成是mysqlback的工作目录,临时用的。

        --backup-image:备份文件名。

        backup-to-image:把所有的备份信息输出到一个备份文件当中

               --with-timepstap: 会自动生成一个带日期文件夹

    增量备份

    备份的操作:先进行全备后进行增备

    mysqlbackup --user=mysqlbackup --password=123 --backup-image=backup.mbi --backup-dir=/backup --with-timestamp backup-to-image #先备份成image

    mysqlbackup --defaults-file=/etc/my.cnf --user=mysqlbackup --password=123 --with-timestamp --incremental --incremental-backup-dir=/backup/ --incremental-base=dir:/backup/2017-09-18_15-53-57 backup #在原来备份的基础上进行增量备份

    跨主机远程备份

    #########备份到其他服务器

    The following command streams the backup as a single-file output to a remote host to be saved under

    the file name my_backup.img (--backup-dir=/tmp designates the directory for storing temporary files

     rather than the final output file):

     mysqlbackup --defaults-file=~/my_backup.cnf --backup-image=- --backup-dir=/tmp backup-to-image | \

      ssh <user name>@<remote host name> 'cat > ~/backups/my_backup.img'

    备份管理

    校验备份可用应

    ./mysqlbackup --backup-image=/home/admin/backups/my.mbi validate

    备份内容查看

    mysqlbackup --backup-image=/backup/my.mbi list-image

    备份文件解压
    • mysqlbackup --backup-image=/backup/2017-09-18_15-53-57/backup.mbi extract
    备份文件解压到指定目录

    mysqlbackup --backup-dir=/backup/backup --backup-image=/backup/2017-09-18_15-53-57/backup.mbi image-to-backup-dir

    监控

    压力测试

    数据恢复

    基于全库备份的恢复

    mysqlbackup --defaults-file=/backup/2017-09-15_17-06-07/server-my.cnf --datadir=/data/mysql --backup-dir=/backup/2017-09-15_17-06-07 copy-back

    利用备份恢复从库

    1 主库做全备份
    备份会锁myisam表,如master是生产库,需要注意,可留意业务进程是否有活动的。

    /test/mysql/base/bin/mysqlbackup --defaults-file=/test/my3352/my.cnf   --socket=/test/my3352/var/mysql.sock --user=root   --password --with-timestamp   --backup-dir=/test/my3352/backup      backup-and-apply-log

    2 备份文件拷到从库主机,做恢复
    保证从库的data和log目录为空,用从库的my.cnf进行恢复
    恢复时可能也会将主库备份的binlog和my.cnf直接恢复到data目录下,可以清理掉

    mv data data_bak
    mv log  log_bak
    mkdir data
    mkdir log
    停从库,清空目录
    mysqlbackup --defaults-file=/test/my3309/my.cnf --backup-dir=/test/myback/BOT/temp  copy-back

    $ ps -ef | grep my3330
    3 启动从库
    Cd $MYSQL_HOME
    mysqld_safe --defaults-file=/test/mydat/$PORT/my.cnf &
    mysql -uroot --socket=/test/my3330/var/mysql.sock

    4 执行备份文件meta目录下backup_gtid_executed.sql文件的SET @@GLOBAL.GTID_PURGED语句(可source backup_gtid_executed.sql)
    mysql> start slave ;
    mysql> show slave status\G
    5 按标准change master to 
    mysql> change master to  master_host='10.33.45.152', master_port=3330,master_user='dbsync', master_password='********', master_auto_position=1;

    6 start slave。
    可能会报ERROR 1872,可以reset slave后,再重新change master.
    ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

    基于增量备份的恢复

    • 还原的操作
    • mysqlbackup --backup-dir=/backup/full --backup-image=/backup/2017-09-18_15-53-57/backup.mbi image-to-backup-dir 先转换成方法一的备份文件,后续的步骤都跟前面一样
    • mysqlbackup --backup-dir=/backup/full apply-log 
    • mysqlbackup --backup-dir=/backup/full --incremental-backup-dir=/backup/2017-09-18_15-56-13 apply-incremental-backup
    • mysqlbackup --defaults-file=/etc/my.cnf --force --backup-dir=/backup/full --datadir=/data/mysql copy-back-and-apply-log

    基于时间点的恢复

    将备份恢复到其他主机上去

     

    未来的你一定会羡慕奋斗的自己
  • 相关阅读:
    高维协方差矩阵估计
    互信息
    投资组合模型
    R语言
    sklearn
    Python学习
    swagger使用过程中遇到的坑
    mysql杂文
    2018狗年,半年报
    Springboot 手动搭建项目 --redis配置&日志完善+用户名
  • 原文地址:https://www.cnblogs.com/fangxuanlang/p/10383544.html
Copyright © 2011-2022 走看看