一. 完全備份恢復說明 xtrabackup二進位文件有一個xtrabackup --copy-back選項,它將備份複製到伺服器的datadir目錄下。下麵是通過 --target-dir 指定完全備份文件的目錄,還原到datadir目錄下。 可以使用xtrabackup --move-back選 ...
一. 完全備份恢復說明
xtrabackup二進位文件有一個xtrabackup --copy-back選項,它將備份複製到伺服器的datadir目錄下。下麵是通過 --target-dir 指定完全備份文件的目錄,還原到datadir目錄下。
xtrabackup --copy-back --target-dir=/data/backups/
可以使用xtrabackup --move-back選項恢復備份。這個選項類似於xtrabackup --copy-back,唯一的區別是它將文件移動到目標位置,而不是複製文件。由於此選項刪除了備份文件,因此必須謹慎使用。
如果您不想使用上述任何一種選項,您可以另外使用rsync或cp來恢覆文件。可以用來恢復備份的rsync命令的示例如下:
$ rsync -avrP /data/backup/ /var/lib/mysql/
在大多數情況下,您需要在啟動資料庫伺服器之前將文件的所有權更改為mysql。最後現有數據已恢復,可以啟動伺服器, 許可權設置如下所示:
$ chown -R mysql:mysql /var/lib/mysql
註意:在恢復備份之前,datadir目錄必須為空。另外MySQL伺服器在執行恢復之前需要關閉,不能還原到正在運行的mysqld實例的datadir目錄下。
恢復還原工作原理請查看:mysql 開發進階篇系列 44 物理備份與恢復( 熱備份xtrabackup 工具介紹)
二. 完全備份恢復案例
-- 在恢復之前先刪除下麵二個表 -- 刪除一個a 表(myisam) DELETE FROM test.a -- 刪除一個testbackup表(innodb) DELETE FROM test.`testbackup`
-- 先停掉服務 [root@hsr data]# service mysql stop -- 刪除data目錄下所有數據文件,安全起見可以先保存原有副本 [root@hsr data]# rm -rf /usr/local/mysql/data/*
-- 使用xtrabackup 完全恢復 [root@hsr data]# xtrabackup --defaults-file=/etc/my.cnf --host=127.0.0.1 --user bkpuser --password=123456 --copy-back
--target-dir=/data/backups/
如下圖所示恢覆成功:
-- 清空mysql錯誤日誌內容,方便等下查看 [root@hsr data]# : > /var/log/mariadb/mariadb.log
--重啟服務失敗,查看錯誤日誌顯示:2018-10-09T05:26:19.082347Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable。2018-10-09T06:03:17.407537Z 0 [ERROR] InnoDB: Operating system error number 13 in a file operation。
-- 使用perror查看狀態13 ,提示沒有許可權 [root@hsr data]# perror 13 OS error code 13: Permission denied
-- 改變屬主關係,將data目錄下所有的文件改成mysql用戶和mysql用戶組。 [root@hsr data]# chown -R mysql:mysql ../data [root@hsr data]# service mysql start Starting MySQL. SUCCESS!
最後啟動成功了,刪除的二個表數據都回來了。
三. 錯誤日誌中的警告信息
3.1 信息:Insecure configuration for --secure-file-priv: Location is accessible to all OS users。解決方法:secure-file-priv我系統指定的目錄是/tmp。 把該目錄下的用戶和用戶組設置成mysql。
[root@hsr tmp]# chown -R mysql.mysql ../tmp
3.2 信息:Insecure configuration for --pid-file: Location '/usr/local/mysql/data' in the path is accessible to all OS users。意思是目錄不安全,所有用戶都可見。解決方法:將data目錄設置mysql用戶和用戶組許可權,以及770許可權。
[root@hsr tmp]# chown -R mysql.mysql /usr/local/mysql/data [root@hsr tmp]# chmod 770 /usr/local/mysql/data
3.3 信息:Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key。解決:重新安裝ssl。 在mysql的bin目錄下找到mysql_ssl_rsa_setup安裝,如下所示:
[root@hsr bin]# pwd /usr/local/mysql/bin
-- 安裝 [root@hsr bin]# mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data --生成後還需將data目錄下的pem文件改用戶組和用戶為mysql [root@hsr data]# chown -R mysql:mysql private_key.pem [root@hsr data]# chown -R mysql:mysql public_key.pem [root@hsr data]# chown -R mysql:mysql server-cert.pem [root@hsr data]# chown -R mysql:mysql server-key.pem ...
3.4 信息:TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details)。 預設是off,如下所示:
--解決在my.cnf中加入 explicit_defaults_for_timestamp=1,重啟服務 [mysqld] explicit_defaults_for_timestamp=1
總結:關於mysql恢復後,服務啟動報文件許可權問題的,所有mysql有關的文件或目錄全部設置成mysql用戶和mysql用戶組。