MySQL数据库备份与恢复(2)

1)备份数据库

[root@localhost ~]# systemctl stop mysqld //停止MySQL服务 [root@localhost ~]# mkdir /backup //新建文件夹,用于存放备份 [root@localhost ~]# tar zcf /backup/mysql-$(date +%F).tar.gz /usr/local/mysql/data //用tar命令将MySQL服务的根目录复制到指定目录。 [root@localhost ~]# ll /backup //查看备份成功的tar包 -rw-r--r--. 1 root root 741234 723 17:00 mysql-2019-07-23.tar.gz

2)模拟故障

[root@localhost ~]# mkdir /bak [root@localhost ~]# mv /usr/local/mysql/data /bak

3)恢复数据库

[root@localhost ~]# tar zxf /backup/mysql-2019-07-23.tar.gz -C / //将tar包解压到指定路径,包中已经包含路径,所以只打“/”即可! [root@localhost ~]# ls /usr/local/mysql/ //查看是否存在data目录 bin data include man my-new.cnf README share support-files COPYING docs lib my.cnf mysql-test scripts sql-bench [root@localhost ~]# systemctl start mysqld //启动mysql服务

物理冷备份到这里已经完成!

mysqldump备份与恢复
通过mysqldump命令可以将指定的库、表或全部的库导出为SQL脚本,便于该命令在不同版本的MySQL服务器上使用。

1)备份数据库
实验环境,mysql管理员没有密码,如果有密码使用“”-p”选项

[root@localhost ~]# mysqldump -u root mysql user > mysql-user.sql //将mysql库中user表保存为“mysql-user.sql”SQL脚本(库名和表名之间用空格分割) [root@localhost ~]# mysqldump -u root --database mysql > mysql.sql //将mysql库保存为“mysql.sql”SQL脚本 [root@localhost ~]# mysqldump -u root --opt --all-databases > all-data.sql //将mysql数据库中的所有库做一个备份,保存为“all-data.sql”SQL脚本文件 //时间较长可以使用“--opt”执行优化速度 [root@localhost ~]# ls //查看备份的脚本文件是否存在 all-data.sql cmake-2.8.6.tar.gz mysql-5.6.36.tar.gz mysql-user.sql anaconda-ks.cfg initial-setup-ks.cfg mysql.sql

备份文件是可以查看的,可以使用“cat”、“more”、“grep”等文本工具进行查看。

2)模拟故障并恢复数据库

[root@localhost ~]# mysql -u root -e 'drop table mysql.user;' [root@localhost ~]# mysql -u root -e 'show tables from mysql;' //“-e”选项用来不进入数据库的情况下输入SQL语句并显示结果 +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slave_master_info | | slave_relay_log_info | | slave_worker_info | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | +---------------------------+ //确认user表已经不存在

当备份文件中只包含表的备份,执行导入操作时必须指定库名,且目标库必须已经存在;
若备份文件已经包括完整的库信息,则执行导入操作时无需指定库名。

[root@localhost ~]# mysql -u root mysql < mysql-user.sql //使用mysql库user表的备份恢复user表 [root@localhost ~]# mysql -u root -e 'show tables from mysql;' +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | help_topic | | innodb_index_stats | | innodb_table_stats | | ndb_binlog_index | | plugin | | proc | | procs_priv | | proxies_priv | | servers | | slave_master_info | | slave_relay_log_info | | slave_worker_info | | slow_log | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | user | +---------------------------+ //确认结果信息,user表已经恢复 [root@localhost ~]# mysql -u root -e 'drop database mysql;' //模拟删除mysql数据库 [root@localhost ~]# mysql -u root -e 'show databases;' +--------------------+ | Database | +--------------------+ | information_schema | | performance_schema | | test | +--------------------+ [root@localhost ~]# mysql -u root < mysql.sql //恢复时前面既不打表名,也不打库名 [root@localhost ~]# mysql -u root -e 'show databases;' +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+

当然,备份整个mysql数据库的SQL语句文件,可以恢复任意一个库或表。

mysql增量备份与恢复

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/314b825f061b7facbfdb18145d70a5b2.html