MySQL數據庫的完全備份可以采用多種方式,物理冷備份一般用tar命令直接打包數據庫文件夾(數據目錄),而在備份前需要先停庫。
1、直接打包數據庫文件夾,源碼包的位置/usr/local/mysql/data/,rpm包的位置 /var/lib/mariadb/
示例:
[root@localhost ~]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| class |
| client |
| li |
| mysql |
| performance_schema |
| sys |
+--------------------+
mysql> exit
Bye
[root@localhost ~]# systemctl stop mysqld.service
[root@localhost ~]# ls /usr/local/mysql/data/
auto.cnf ibdata1 localhost.localdomain.err sys
class ib_logfile0 mysql
client ib_logfile1 mysql.log
ib_buffer_pool li performance_schema
[root@localhost ~]# ls /usr/local/mysql/data/class/
db.opt users.frm users.ibd
[root@localhost ~]# rpm -q xz
xz-5.1.2-9alpha.el7.x86_64
[root@localhost ~]# tar jcf backup/mysql_all-$(date +%F).tar.xz /usr/local/mysql/data/
tar: 從成員名中刪除開頭的“/”
[root@localhost ~]# ls backup/
client.user_info-20191012.sql mysql_all-2019-10-14.tar.xz
[root@localhost ~]# rm -rf /usr/local/mysql/data/class/
[root@localhost ~]# ls /usr/local/mysql/data/
auto.cnf ibdata1 li mysql.log
client ib_logfile0 localhost.localdomain.err performance_schema
ib_buffer_pool ib_logfile1 mysql sys
[root@localhost ~]# systemctl start mysqld.service
[root@localhost ~]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| client |
| li |
| mysql |
| performance_schema |
| sys |
+--------------------+
6 rows in set (0.00 sec)
mysql> exit
Bye
[root@localhost ~]# mkdir /news
[root@localhost ~]# mv backup/mysql_all-2019-10-14.tar.xz /news/
[root@localhost ~]# cd /news/
[root@localhost news]# ls
mysql_all-2019-10-14.tar.xz
[root@localhost news]# tar xf mysql_all-2019-10-14.tar.xz
[root@localhost news]# ls
mysql_all-2019-10-14.tar.xz usr
[root@localhost news]# ls usr/local/mysql/data/class/
db.opt users.frm users.ibd
[root@localhost news]# mv usr/local/mysql/data/class /usr/local/mysql/data/
[root@localhost news]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| class |
| client |
| li |
| mysql |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.00 sec)
mysql> use class;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from users;
+-----------+-------------------------------------------+
| user_name | user_passwd |
+-----------+-------------------------------------------+
| lisi | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
| wangwu | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| zhangsan | *E56A114692FE0DE073F9A1DD68A00EEB9703F3F1 |
+-----------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql> exit
2、使用專用備份工具mysqldump
MySQL自帶的備份工具mysqldump,可以很方便的對MySQL進行備份。通過該命令工具可以將數據庫、數據表或全部的庫導出為SQL腳本,便於該命令在不同版本的MySQL服務器上使用。例如,當需要升級MySQL服務器時,可以先使用mysqldump命令將原有庫信息到導出,然后直接在升級后的MySQL服務器中導入即可。
(1)對單個庫進行完全備份
格式:mysqldump -u用戶名 -p[密碼] [選項] --databases [數據庫名] > /備份路徑/備份文件名
示例:
[root@localhost ~]# mysqldump -uroot -p123456 --databases auth > backup/auth-$(date +%Y%m%d).sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~]# cat backup/auth-20181214.sql
(2)對多個庫進行完全備份
格式:mysqldump -u用戶名 -p [密碼] [選項] --databases 庫名1 [庫名2]… > /備份路徑/備份文件名
示例:
[root@localhost ~]# mysqldump -uroot -p123456 --events --databases mysql auth > backup/mysql+auth-$(date +%Y%m%d).sql
[root@localhost ~]# cat backup/mysql+auth-20181214.sql
(3)對所有庫進行完全備份
格式:mysqldump -u用戶名 -p [密碼] [選項] --opt --all-databases > /備份路徑/備份文件名
示例:
[root@localhost ~]# mysqldump -uroot -p123456 --events --opt --all-databases > backup/mysql_all.$(date +%Y%m%d).sql
[root@localhost ~]# cat backup/mysql_all.20181214.sql
//--opt 加快備份速度,當備份數據量大時使用
[root@localhost ~]# cat backup/mysql_all.20160505.sql
(4)對表進行完全備份
格式:mysqldump -u用戶名 -p [密碼] [選項] 數據庫名 表名 > /備份路徑/備份文件名
示例:
[root@localhost ~]# mysqldump -uroot -p123456 auth user > backup/auth_user-$(date +%Y%m%d).sql
[root@localhost ~]# cat backup/auth_user-20181214.sql
(5)對表結構的備份
格式:mysqldump -u用戶名 -p [密碼] -d 數據庫名 表名 > /備份路徑/備份文件名
示例:
[root@localhost ~]# mysqldump -uroot -p123456 -d mysql user > backup/desc_mysql_user-$(date +%Y%m%d).sql
[root@localhost ~]# cat backup/desc_mysql_user-20181214.sql
使用mysqldump備份后,恢復數據庫
1、source命令
登錄到MySQL數據庫,執行source 備份sql腳本路徑
示例:
[root@localhost ~]# mysql -uroot -p123456
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| mysql |
| performance_schema |
| test |
| usr |
+--------------------+
6 rows in set (0.00 sec)
mysql> drop database auth;
Query OK, 1 row affected (0.12 sec)
mysql> source backup/mysql_all.20181214.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| mysql |
| performance_schema |
| test |
| usr |
+--------------------+
6 rows in set (0.00 sec)
2、mysql命令
格式:mysql -u用戶名 -p [密碼] < 庫備份腳本的路徑
mysql -u用戶名 -p [密碼] 庫名 < 表備份腳本的路徑
示例:
[root@localhost ~]# mysql -uroot -p123456 -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| mysql |
| performance_schema |
| test |
| usr |
+--------------------+
[root@localhost ~]# mysql -uroot -p123456 -e 'drop database auth;'
[root@localhost ~]# mysql -uroot -p123456 < backup/mysql_all.20181214.sql
[root@localhost ~]# mysql -uroot -p123456 -e 'show databases;'
+--------------------+
| Database |
+--------------------+
| information_schema |
| auth |
| mysql |
| performance_schema |
| test |
| usr |
+--------------------+
[root@localhost ~]# mysql -uroot -p123456 -e 'drop table auth.user;'
[root@localhost ~]# mysql -uroot -p123456 auth< backup/auth_user-20181214.sql
[root@localhost ~]# mysql -uroot -p123456 -e 'select * from auth.user;'
+------------+------+
| name | ID |
+------------+------+
| crushlinux | 123 |
+------------+------+