[root@sutest242 data]# pwd
/data/mysql/pmysql3330/data
[root@sutest242 data]# ls -lh | grep tokudb
-rw-r-----. 1 mysql mysql 16K Jun 24 10:42 tokudb.directory
-rw-r-----. 1 mysql mysql 16K Jun 24 10:42 tokudb.environment
-rw-------. 1 mysql mysql 0 Jun 24 10:42 __tokudb_lock_dont_delete_me_data
-rw-------. 1 mysql mysql 0 Jun 24 10:42 __tokudb_lock_dont_delete_me_environment
-rw-------. 1 mysql mysql 0 Jun 24 10:42 __tokudb_lock_dont_delete_me_logs
-rw-------. 1 mysql mysql 0 Jun 24 10:42 __tokudb_lock_dont_delete_me_recovery
-rw-------. 1 mysql mysql 0 Jun 24 10:42 __tokudb_lock_dont_delete_me_temp
-rw-r-----. 1 mysql mysql 16K Jun 24 10:42 tokudb.rollback
tokudb如何備份呢?
單表也可使用mysqldump。全庫呢? tokudb引擎全庫備份,官方版本是使用 tokudb_backup 引擎來進行,支持在線熱備。也就是,須要另外安裝這個引擎,安裝相對簡單,使用 ps_tokudb_admin + 重啓數據庫服務預加載引擎 + ps_tokudb_admin。
4.1 安裝備份引擎
首先,確保數據庫是啓動正常狀態,執行ps_tokudb_admin,若是 數據庫配置文件 cnf不是在 /etc/my.cnf,須要手動指定 --defaults-file,避免沒法找到配置文件寫入 preload-hotbackup。
[root@sutest242 pmysql]# ps_tokudb_admin --enable-backup --socket=/tmp/pmysql3330.sock -uroot -p*** --defaults-file=/data/mysql/pmysql3330.cnf
Checking SELinux status...
INFO: SELinux is in permissive mode.
Checking if Percona Server is running with jemalloc enabled...
INFO: Percona Server is running with jemalloc enabled.
Checking transparent huge pages status on the system...
INFO: Transparent huge pages are currently disabled on the system.
Checking if thp-setting=never option is already set in config file...
INFO: Option thp-setting=never is not set in the config file.
(needed only if THP is not disabled permanently on the system)
Checking if preload-hotbackup option is already set in config file...
INFO: Option preload-hotbackup is not set in the config file.
Checking TokuDB engine plugin status...
INFO: TokuDB engine plugin is installed.
Checking TokuBackup plugin status...
INFO: TokuBackup plugin is not installed.
Adding preload-hotbackup option into /data/mysql/pmysql3330.cnf
INFO: Successfully added preload-hotbackup option into /data/mysql/pmysql3330.cnf
PLEASE RESTART MYSQL SERVICE AND RUN THIS SCRIPT AGAIN TO FINISH INSTALLATION!
這個時候,能夠看到提示:Successfully added preload-hotbackup option into /data/mysql/pmysql3330.cnf,查看配置文件,在 mysqld_safe 配置中,添加多了一行 配置 :preload-hotbackup。
[mysqld_safe]
preload-hotbackup
malloc-lib=/usr/lib/libjemalloc.so.1
重啓數據庫服務,使用 mysqladmin關閉,mysqld_safe 啓動
[root@sutest242 pmysql]# /usr/local/pmysql/bin/mysqladmin --socket=/tmp/pmysql3330.sock -uroot -p shutdown
Enter password:
2017-06-26T03:48:20.192200Z mysqld_safe mysqld from pid file /data/mysql/pmysql3330/data/mysql.pid ended
[1]+ Done ./bin/mysqld_safe --defaults-file=/data/mysql/pmysql3330.cnf
[root@sutest242 pmysql]# ./bin/mysqld_safe --defaults-file=/data/mysql/pmysql3330.cnf &
[1] 10069
[root@sutest242 pmysql]# mysqld_safe Adding '/usr/lib/libjemalloc.so.1' to LD_PRELOAD for mysqld
mysqld_safe Adding '/usr/lib64/libHotBackup.so' to LD_PRELOAD for mysqld
2017-06-26T03:50:32.005677Z mysqld_safe Logging to '/data/mysql/pmysql3330/data/error.log'.
2017-06-26T03:50:32.013350Z mysqld_safe Logging to '/data/mysql/pmysql3330/data/error.log'.
2017-06-26T03:50:32.099577Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/pmysql3330/data
這裏有個地方注意下, libHotBackup.so 記得要cp到 /usr/lib 或者 /usr/lib64的目錄下,否則mysqld_safe啓動數據庫的時候,會報錯以下:
mysqld_safe Adding '/usr/lib/libjemalloc.so.1' to LD_PRELOAD for mysqld
mysqld_safe Adding '/opt/percona/Percona-Server-5.7.17-13-Linux.x86_64.ssl101/lib/libHotBackup.so' to LD_PRELOAD for mysqld
mysqld_safe ld_preload libraries can only be loaded from system directories (/usr/lib64, /usr/lib, /usr/local/pmysql/lib)
這種狀況下,它檢查到 安裝目錄下有 libHotBackup.so 引擎文件,會使用這個加載,須要 把這個文件拷貝到 /usr/lib64 或者 /usr/lib,再從新加載這個文件,而後再次執行 mysqld_saft啓動服務。
cp /opt/percona/Percona-Server-5.7.17-13-Linux.x86_64.ssl101/lib/libHotBackup.so /usr/lib/libHotBackup.so
mv /opt/percona/Percona-Server-5.7.17-13-Linux.x86_64.ssl101/lib/libHotBackup.so /opt/percona/Percona-Server-5.7.17-13-Linux.x86_64.ssl101/lib/libHotBackup.so.bak
數據庫啓動後,安裝備份引擎
[root@sutest242 pmysql]# ps_tokudb_admin --enable-backup --socket=/tmp/pmysql3330.sock -uroot -p
Enter password:
Checking SELinux status...
INFO: SELinux is in permissive mode.
Checking if Percona Server is running with jemalloc enabled...
INFO: Percona Server is running with jemalloc enabled.
Checking transparent huge pages status on the system...
INFO: Transparent huge pages are currently disabled on the system.
Checking if thp-setting=never option is already set in config file...
INFO: Option thp-setting=never is not set in the config file.
(needed only if THP is not disabled permanently on the system)
Checking if preload-hotbackup option is already set in config file...
INFO: Option preload-hotbackup is set in the config file.
Checking TokuDB engine plugin status...
INFO: TokuDB engine plugin is installed.
Checking TokuBackup plugin status...
INFO: TokuBackup plugin is not installed.
Checking if Percona Server is running with libHotBackup.so preloaded...
INFO: Percona Server is running with libHotBackup.so preloaded.
Adding thp-setting=never option into /etc/my.cnf
INFO: Successfully added thp-setting=never option into /etc/my.cnf
Installing TokuBackup plugin...
INFO: Successfully installed TokuBackup plugin.
檢查
root@localhost:pmysql3330.sock 14:34:21 [(none)]>show plugins;
......
| TokuDB | ACTIVE | STORAGE ENGINE | ha_tokudb.so | GPL |
| TokuDB_background_job_status | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_file_map | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_fractal_tree_block_map | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_fractal_tree_info | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_locks | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_lock_waits | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
| TokuDB_trx | ACTIVE | INFORMATION SCHEMA | ha_tokudb.so | GPL |
|
tokudb_backup | ACTIVE | DAEMON | tokudb_backup.so | GPL |
+-------------------------------+----------+--------------------+------------------+---------+
59 rows in set (0.00 sec)
4.2 備份tokudb
實例備份
- 配置前提
-
- 若是實例含有innodb引擎的表格,須要關閉 innodb異步io的變量 innodb_use_native_aio,避免出現數據不一致,沒法恢復的備份。這個變量只能在配置文件中添加,屬於readonly變量
- 創建備份文件夾,這個文件夾必須是爲空、受權備份文件夾可寫,由於備份的時候,須要寫入及建立文件夾,因此對其所在的文件夾須要有權限
- 注意,tokudb_back對自己引擎的表格,支持對單獨存儲的 tokudb_data_dir\ tokudb_log_dir \binary log備份,可是,不支持不支持不支持 innodb或者myisam引擎的表格另外存儲,也就是 全部的InnoDB存儲引擎,MyISAM,及其餘文件必須在MySQL datadir
- tokubackup不備份MySQL的配置文件(S)
- tokubackup不支持增量備份
- 配置
-
- 在配置文件中設置 innodb_use_native_aio = OFF,重啓數據庫實例,這裏注意,啓動數據庫須要到 /usr/local/pmysql 目錄下,執行 ./bin/mysqld_safe --defaults-file=/data/mysql/pmysql3330.cnf
- 創建文件夾 /data/backup/pmysql3330 ,並受權
-
- chown -R mysql:mysql /data/backup
備份分爲2中,一種是實例備份,一種是指定備份,目前tokudb_backup僅支持整個實例備份,支持混合引擎,指定備份,目前採用mysqldump方法。
- 實例備份
-
- set tokudb_backup_dir='/data/backup/pmysql3330';
- 執行這個指令則開始備份,備份過程當中,支持讀寫,
- 備份出錯驗證
root@localhost:pmysql3330.sock 10:57:13 [(none)]>select
@@tokudb_backup_last_error;
+----------------------------+
| @@tokudb_backup_last_error |
+----------------------------+
| 13 |
+----------------------------+
1 row in set (0.00 sec)
root@localhost:pmysql3330.sock 10:57:30 [(none)]>select
@@tokudb_backup_last_error_string;
+---------------------------------------------------+
| @@tokudb_backup_last_error_string |
+---------------------------------------------------+
| tokudb backup couldn't create needed directories. |
+---------------------------------------------------+
1 row in set (0.00 sec)
[root@sutest242 local]# /usr/local/pmysql/bin/mysqldump --socket=/tmp/pmysql3330.sock -uroot -p --set-gtid-purged=OFF --databases toku --tables tbback_toku > /tmp/tbback_toku.sql
Enter password:
- 實例備份後還原
-
- tokudbback沒有特定的函數進行數據恢復,可使用cp或者sync到 數據目錄,或者直接使用備份目錄
- 注意權限修改
rsync -avrP /data/backup/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql