MySQL完全备份操作

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 |

+------------+------+

猜你喜欢

转载自www.cnblogs.com/liyurui/p/11740522.html