mysql 完整備份和恢復


mysql 完整備份和恢復

 

一、MySQL完整備份操作

1、直接打包數據庫文件夾

創建數據庫auth:

MariaDB [(none)]> create database auth;
Query OK, 1 row affected (0.00 sec)

進入數據庫:

MariaDB [(none)]> use auth
Database changed
創建數據表:

MariaDB [auth]> create table user(name char(10)not null,ID int(48));
Query OK, 0 rows affected (0.01 sec)

插入數據信息:

MariaDB [auth]> insert into user values('crushlinux','123');
Query OK, 1 row affected (0.01 sec)

查看數據信息:

MariaDB [auth]> select * from user;
+------------+------+
| name | ID |
+------------+------+
| crushlinux | 123 |
+------------+------+
1 row in set (0.00 sec)

對它進行備份

先退出MySQL停庫

[root@localhost ~]# systemctl stop mariadb

直接對它進行打包壓縮(新引入一個小命令)

[root@localhost ~]# rpm -q xz
xz-5.1.2-9alpha.el7.x86_64

[root@localhost ~]# mkdir backup                // 創建一個文件,把壓縮包放進去
[root@localhost ~]# tar Jcf backup/mysql_all-$(date +%F).tar.xz /var/lib/mysql/
tar: 從成員名中刪除開頭的“/”

模擬數據丟失:

[root@localhost ~]# rm -rf /var/lib/mysql/auth/

起服務:[root@localhost ~]# systemctl start mariadb

恢復數據:

[root@localhost ~]# mkdir restore              //雖已創建一個文件
[root@localhost ~]# tar xf backup/mysql_all-2019-10-13.tar.xz -C restore/    將那個壓縮包解壓到這個文件里
[root@localhost ~]# cd restore/                    //切換到這個文件里查看
[root@localhost restore]# ls
var
[root@localhost restore]# cd var/lib/mysql/       // 繼續查看
[root@localhost mysql]# ls
aria_log.00000001 auth ibdata1 ib_logfile1 performance_schema
aria_log_control crushlinux ib_logfile0 mysql test
[root@localhost mysql]# mv auth/ /var/lib/mysql/          //發現有auth,將它移動到/var/lib/mysql/下

登錄MySQL查看:

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| crushlinux |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.01 sec)

MariaDB [auth]> select * from user;
+------------+------+
| name | ID |
+------------+------+
| crushlinux | 123 |
+------------+------+
1 row in set (0.00 sec)

2、使用專用備份工具mysqldump

MySQL 自帶的備份工具 mysqldump,可以很方便的對MySQL進行備份。通過該命令工具可以將數據庫、數據表或全部的庫導出為SQL腳本,便於該命令在不同版本的 MySQL務器上使用。例如, 當需要升級 MySQL 服務器時,可以先使用mysqldump命令將原有庫信息到導出,然后直接在升級后的MySQL服務器中導入即可。

(1)對單個庫進行完全備份

[root@localhost ~]# mysqldump -uroot -p123 --databases auth > backup/auth-$(date +%Y%m%d).sql

[root@localhost ~]# ls backup/
auth-20191013.sql mysql_all-2019-10-13.tar.xz
[root@localhost ~]# grep -Ev "^/|^$|^-" backup/auth-20191013.sql 
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `auth` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `auth`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`name` char(10) NOT NULL,
`ID` int(48) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOCK TABLES `user` WRITE;
INSERT INTO `user` VALUES ('crushlinux',123);
UNLOCK TABLES;

(2)對多個庫進行完全備份:

[root@localhost ~]# mysqldump -uroot -p123 --databases auth mysql> backup/auth+mysql-$(date +%Y%m%d).sql

[root@localhost ~]# ls backup/
auth-20191013.sql auth+mysql-20191013.sql mysql_all-2019-10-13.tar.xz

(3)對所有庫進行完全備份:

[root@localhost ~]# mysqldump -uroot -p123 --events --opt --all-databases > backup/mysql_all.$(date +%Y%m%d).sql

[root@localhost ~]# ls backup/
auth-20191013.sql mysql_all.20191013.sql
auth+mysql-20191013.sql mysql_all-2019-10-13.tar.xz

(4)對表進行完全備份:

[root@localhost ~]# mysqldump -uroot -p123 auth user > backup/auth_user-$(date +%Y%m%d).sql
[root@localhost ~]# ls backup/
auth-20191013.sql auth_user-20191013.sql mysql_all-2019-10-13.tar.xz
auth+mysql-20191013.sql mysql_all.20191013.sql

[root@localhost ~]# grep -Ev "^/|^$|^-" backup/auth_user-20191013.sql 
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`name` char(10) NOT NULL,
`ID` int(48) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
LOCK TABLES `user` WRITE;
INSERT INTO `user` VALUES ('crushlinux',123);
UNLOCK TABLES;

(5)對表結構的備份

[root@localhost ~]# mysqldump -uroot -p123 -d auth user > backup/desc_auth_user-$(date +%Y%m%d).sql

[root@localhost ~]# grep -Ev "^/|^$|^-" backup/desc_auth_user-20191013.sql 
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`name` char(10) NOT NULL,
`ID` int(48) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

二、恢復數據

1、使用source命令

[root@localhost ~]# mysql -uroot -p123
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 5.5.41-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> drop database auth;
Query OK, 1 row affected (0.02 sec)

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| crushlinux |
| mysql |
| performance_schema |
| test |
+--------------------+
5 rows in set (0.00 sec)

先確定auth的備份的路徑:backup/auth-20191013.sql

MariaDB [(none)]> source backup/auth-20191013.sql

MariaDB [auth]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| crushlinux |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)

2、用mysql命令

MariaDB [auth]> drop database auth;
Query OK, 1 row affected (0.01 sec)

[root@localhost ~]# mysql -uroot -p123 < backup/auth-20191013.sql 

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| crushlinux |
| mysql |
| performance_schema |
| test |
+--------------------+
6 rows in set (0.00 sec)

-e后面可以加執行的語句:

[root@localhost ~]# mysql -uroot -p123 -e 'select * from auth.user;'
+------------+------+
| name | ID |
+------------+------+
| crushlinux | 123 |
+------------+------+

三、MySQL備份思路
1、定期實施備份,指定備份計划或策略,並嚴格遵守.
2、除了進行完全備份,開啟 MySQL 服務器的 binlog_日志功能是很重要的(完全備份加上日志,可以對MySQL進行最大化還原)。

3、使用統一和易理解的備份名稱,推薦使用庫名或者表名加上時間的命名規則,如mysql_user-20181214.sql,不要使用backup1或者abc之類沒有意義的名字。

4、定期抽查備份的可靠性,做還原測試或者檢查文件大小等方式。

5、通過異地或者跨機房等方式來存放備份數據,防止源數據和備份文件一起損壞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM