mysql innodb cluster 無感知集羣

       MySQL 8.0.12 innodb cluster 高可用集羣部署運維管理手冊

Innodb cluster 原理介紹

Innodb cluster  利用組複製的 pxos 協議,保障數據一致性,組複製支持單主模式和多主模式,html

本文推薦的高可用架構爲單主模式下,基於mysqlrouter的 innodb cluster:mysql

 

 

 

搭建步驟

系統:centos 7.5linux

Mysql:8.0.12   二進制包sql

Mysqlshell: 8.0.12  rpm 包shell

Mysql router: 8.0.12  二進制包數據庫

架構:  

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

 

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

 

192.168.181.103  mysql-1                MySQL服務端、MySQL-shellcentos

 

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=0;SQL_LOG_BIN
DDL語句;
DML語句;
SET=1;SQL_LOG_BIN

 

注意修改 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

基於時間點的恢復

將備份恢復到其餘主機上去

相關文章
相關標籤/搜索