加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql数据备份与恢复

发布时间:2020-12-12 00:03:01 所属栏目:MySql教程 来源:网络整理
导读:MySQL数据备份与恢复 一、使用mysqldump实现逻辑备份 备份文件.sql (本地使用可以省略 -h 服务器名) -h 服务器 -u用户名 数据库名 > 备份文件.sql (本地使用可以省略 - span style="color: #008000;"# span style="color: #008000;"示例(以下是有密码的

MySQL数据备份与恢复

一、使用mysqldump实现逻辑备份

备份文件.sql (本地使用可以省略 -h 服务器名) -h 服务器 -u用户名 数据库名 > 备份文件.sql (本地使用可以省略 -<span style="color: #008000;">#<span style="color: #008000;">示例(以下是有密码的时候的操作):<span style="color: #008000;">

<span style="color: #008000;">单库备份

<span style="color: #000000;">备份库中所有的表
mysqldump -uroot -p123 db1 > D:db1.sql <span style="color: #008000;">#<span style="color: #008000;">将数据库db1备份到D盘下,文件名称为db1.sql
<span style="color: #000000;">备份库中部分表
mysqldump -uroot -p123 db1 table1 table2 > D:db1-table1-table2.sql <span style="color: #008000;">#<span style="color: #008000;">将数据库db1里的表table1和table2备份到D盘下名称为db1-table1-table2.sql的文件中

<span style="color: #008000;">#<span style="color: #008000;">多库备份
mysqldump -uroot -p123 --databases db1 db2 mysql db3 >D:db1_db2_mysql_db3.sql <span style="color: #008000;">#<span style="color: #008000;">将数据库db1,db2,mysql,db3备份到D盘中

<span style="color: #008000;">#<span style="color: #008000;">备份所有库
mysqldump -uroot -p123 --all-databases >D:all.sql <span style="color: #008000;">#<span style="color: #008000;">将root用户的所有数据库全部备份到D盘中,文件名为all.sql

二、恢复逻辑备份

<span style="color: #008000;">#<span style="color: #008000;">恢复单个库:<span style="color: #008000;">

<span style="color: #008000;">方法一:不需要进入mysql程序,直接在终端输入

mysql -uroot -p123 db1 <<span style="color: #000000;"> D:db1.sql

<span style="color: #008000;">#<span style="color: #008000;">方法二:
<span style="color: #000000;">从终端先进入mysql程序,然后输入
mysql><span style="color: #000000;"> use db1;
mysql><span style="color: #000000;"> source D:db1.sql

<span style="color: #008000;">#<span style="color: #008000;">注:如果备份/恢复单个库时,可以修改sql文件
DROP database <span style="color: #0000ff;">if<span style="color: #000000;"> exists school;
create database school;
use school;

<div class="cnblogs_code">

>mysql -uroot -e +------------------+
| Tables_in_school |
+------------------+
|             |
| course           |
| score            |
| student          |
| teacher          |
+------------------+

三、备份/恢复案例

数据库备份/1. /backup/`date +%F`_all.sql 2. 3. 插入数据 //4. mysql> set sql_log_bin=0; //>恢复:
1. <span style="color: #008000;">#
<span style="color: #008000;"> mysqlbinlog 最后一个binlog > /backup/last_bin.log

2. mysql> set sql_log_bin=<span style="color: #000000;">0;
mysql
> source /backup/2014-02-13_all.sql //<span style="color: #000000;">恢复最近一次完全备份
mysql
> source /backup/last_bin.log //<span style="color: #000000;">恢复最后个binlog文件

<span style="color: #008000;">#<span style="color: #008000;">数据库备份/恢复实验二:如果有误删除
<span style="color: #000000;">备份:
1. mysqldump -uroot -p123 --all-databases > /backup/date +%<span style="color: #000000;"&gt;F_all.sql
2. mysql -uroot -p123 -e <span style="color: #800000;">'<span style="color: #800000;">flush logs<span style="color: #800000;">' //<span style="color: #000000;">截断并产生新的binlog
3. 插入数据 //<span style="color: #000000;">模拟服务器正常运行
4. drop table db1.t1 //<span style="color: #000000;">模拟误删除
5. 插入数据 //<span style="color: #000000;">模拟服务器正常运行

恢复:
1. <span style="color: #008000;">#<span style="color: #008000;"> mysqlbinlog 最后一个binlog --stop-position=260 > /tmp/1.sql <span style="color: #008000;">

<span style="color: #008000;"> mysqlbinlog 最后一个binlog --start-position=900 > /tmp/2.sql

  1. mysql> set sql_log_bin=<span style="color: #000000;">0;
    mysql> source /backup/2014-02-13_all.sql //<span style="color: #000000;">恢复最近一次完全备份
    mysql> source /tmp/1.log //<span style="color: #000000;">恢复最后个binlog文件
    mysql> source /tmp/2.log //<span style="color: #000000;">恢复最后个binlog文件

注意事项:
1<span style="color: #000000;">. 完全恢复到一个干净的环境(例如新的数据库或删除原有的数据库)
2. 恢复期间所有SQL语句不应该记录到binlog中

四、实现自动化备份

1. 什么时间 2:00 23备份脚本:
[root@egon
~]<span style="color: #008000;">#
<span style="color: #008000;"> vim /mysql_back.sql
<span style="color: #008000;">

<span style="color: #008000;">!/bin/bash

back_dir=/<span style="color: #000000;">backup
back_file=date +%<span style="color: #000000;"&gt;F_all.sql
user=<span style="color: #000000;">root
<span style="color: #0000ff;">pass=123

<span style="color: #0000ff;">if [ ! -d /<span style="color: #000000;">backup ];then
mkdir -p /<span style="color: #000000;">backup
fi

<span style="color: #008000;">#<span style="color: #008000;"> 备份并截断日志
mysqldump -u${user} -p${<span style="color: #0000ff;">pass} --events --all-databases > ${back_dir}/<span style="color: #000000;">${back_file}
mysql -u${user} -p${<span style="color: #0000ff;">pass} -e <span style="color: #800000;">'<span style="color: #800000;">flush logs<span style="color: #800000;">'

<span style="color: #008000;">#<span style="color: #008000;"> 只保留最近一周的备份
<span style="color: #000000;">cd $back_dir
find . -mtime +7 -<span style="color: #0000ff;">exec rm -<span style="color: #000000;">rf {} ;

手动测试:
[root@egon ~]<span style="color: #008000;">#<span style="color: #008000;"> chmod a+x /mysql_back.sql
[root@egon ~]<span style="color: #008000;">#<span style="color: #008000;"> chattr +i /mysql_back.sql
[root@egon ~]<span style="color: #008000;">#<span style="color: #008000;"> /mysql_back.sql
<span style="color: #000000;">
配置cron:
[root@egon ~]<span style="color: #008000;">#<span style="color: #008000;"> crontab -l
0 2 * /mysql_back.sql

五、表的导出和导入

>* // //)不一定要写 // ; //执行会报错,以前旧版本可以执行,新版为了保护数据安全,不能直接导出
ERROR
1290 (HY000): The MySQL server <span style="color: #0000ff;">is
running with the --secure-file-<span style="color: #000000;">priv option so it cannot execute this statement

mysql> show variables like <span style="color: #800000;">'<span style="color: #800000;">%secure%<span style="color: #800000;">'; <span style="color: #008000;">#<span style="color: #008000;">查看相关设置
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| require_secure_transport | OFF |
| secure_auth | ON |
| secure_file_priv | NULL |
+--------------------------+-------+<span style="color: #000000;">

set <span style="color: #0000ff;">global secure_auth=<span style="color: #000000;">OFF;
set secure_auth=<span style="color: #000000;">OFF;
以上两种直接更改设置的方法都是行不通的,需要更改配置文件
[mysqld]
secure-file-priv=<span style="color: #800000;">'<span style="color: #800000;">E:<span style="color: #800000;">'<span style="color: #000000;">
在配置文件里更改配置后,即可执行导出操作

mysql 命令导出文本文件
示例:
<span style="color: #008000;">#<span style="color: #008000;"> mysql -u root -p123 -e 'select * from student1.school' > /tmp/student1.txt<span style="color: #008000;">

<span style="color: #008000;"> mysql -u root -p123 --xml -e 'select * from student1.school' > /tmp/student1.xml<span style="color: #008000;">

<span style="color: #008000;"> mysql -u root -p123 --html -e 'select * from student1.school' > /tmp/student1.html

<span style="color: #000000;">
load data infile 导入文本文件(要按照表结构导入)
mysql> load data infile <span style="color: #800000;">'<span style="color: #800000;">E:student1.txt<span style="color: #800000;">'<span style="color: #000000;">
into table school.student1
fields terminated by <span style="color: #800000;">'<span style="color: #800000;">,<span style="color: #800000;">'<span style="color: #000000;">
(optionally enclosed by <span style="color: #800000;">'<span style="color: #800000;">”<span style="color: #800000;">'<span style="color: #000000;">)
lines terminated by <span style="color: #800000;">'<span style="color: #800000;">n<span style="color: #800000;">';

六、数据库迁移

括号内的可以不写,因为源IP就是自己,不需要指定

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读