2

BZkiaz54的个人空间

 3 years ago
source link: https://my.oschina.net/u/5153555/blog/5082464
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

9. Mysql数据库备份与还原

1. 备份的应用场景

在服务器进行数据传输、数据存储和数据交换,就有可能产生数据故障。比如发生意外停机或存储www.rsxedu.com介质损坏。这时,如果没有采取数据备份和数据恢复手段与措施,就会导致数据的丢失,造成的损失是无法弥补与估量的。

2. mysqldump 命令备份数据

我们在导出数据的时候会有不同的场景需求,大概有几种情况:

  • 导出 mysql 中的所有数据库的 表结构 以及 表数据

    mysqldump --all-databases --master-data -u用户名 -p'密码' > dbdump.db
  • 导出 mysql 中某个单独数据库www.meimeitu8.com的 表结构 以及 表数据

    mysqldump -u用户名 -p密码 -h127.0.0.1 -P3306 数据库实例名称 > 备份文件.sql
  • 导出 mysql 中的数据库 表结构,不包含 表数据

    mysqldump -u用户名 -p密码 -h127.0.0.1 -P3306 --add-locks -q -d 数据库实例名称 > 备份文件.sql
    
    -- 参数说明:
    -h:指定访问主机
    -P:指定端口号
    -q:不缓冲查询,直接导出至标准输出
    --add-locks :导出过程中锁定表,完成后回解锁。
    -d :只导出表结构,不含数据

2.1 使用 mysqldump 的 前提:需要开启 binlog 日志功能

# 1. 修改mysql的配置文件
vim /etc/my.cnf

[mysqld]
# binlog
# 配置log-bin后,必须配置server-id,MySQL才能启动;
# server-id在所有的主从服务之间要保证唯一;
log-bin=mysql-bin
server-id=1

# 2.配置完毕之后,重启mysql服务
service mysqld restart

2.2 导出 mysql 中的所有数据库的 表结构 以及 表数据

[root@server01 opt]# mysqldump --all-databases --master-data -uroot -p > dbdump.db
Enter password: 

2.3 导出 mysql 中某个单独数据库的 表结构 以及 表数据

[root@server01 opt]# mysqldump -uroot -p -h127.0.0.1 -P3306  test > test.sql
Enter password: 

2.4 导出 mysql 中的数据库 表结构,不包含 表数据

[root@server01 opt]# mysqldump -uroot -p -h127.0.0.1 -P3306 --add-locks -q -d test > test.sql
Enter password: 

3. source命令备份与还原

#还原格式:
SOURCE 导入文件的路径;

2. 还原
 要先登录
 create database db1;
 use db1;
 source 路径/备份.sql; 
  执行这个sql脚本文件

注意:还原的时候需要先登录MySQL,并选中对应的数据库

4. 备份、还原db1数据库中的数据

4.1 备份 db1 数据库

[root@server01 opt]# mysqldump -uroot -p -h127.0.0.1 -P3306 db1 > db1.sql
Enter password: 
[root@server01 opt]# 
[root@server01 opt]# ls -ll -h db1.sql 
-rw-r--r-- 1 root root 3.3K Feb  8 15:12 db1.sql
[root@server01 opt]# 

4.2 删除db1数据库中所有的内容

mysql> drop database db1;
Query OK, 2 rows affected (0.02 sec)

4.3 创建一个新的db1数据库

导入数据之前,需要创建数据库。

mysql> create database db1 charset utf8;
Query OK, 1 row affected (0.01 sec)

4.4  选中数据库

mysql> use db1; -- 使用db1数据库
Database changed
mysql> 
mysql> select database(); -- 查看当前使用的数据库
+------------+
| database() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)

mysql> 
mysql> show tables; -- 查看数据库中的表,当前没有表
Empty set (0.00 sec)

mysql> 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=1590461051865

4.5 使用SOURCE命令还原数据

-- 使用 source 命令导入数据
mysql> source /opt/db1.sql;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

...
-- 查看当前使用的数据库为 db1
mysql> select database();
+------------+
| database() |
+------------+
| db1        |
+------------+
1 row in set (0.00 sec)

mysql> 
-- 查看当前db1中的数据库表,可以看到已经成功导入
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| product       |
| stu3          |
+---------------+
2 rows in set (0.00 sec)

mysql> 

5. mysql 命令导入数据

在上面我们使用 source 命令来还原数据,但是这个缺陷是要先进行 mysql 登录。这个命令如果写在 shell 脚本中还没那么方便。

那么我们可以使用 mysql 命令来直接导入数据。

格式如下:

mysql -u用户名 -p密码 数据库名称 < 备份文件

执行示例如下:

[root@server01 opt]# mysql -uroot -p db1 < db1.sql 
Enter password: 
[root@server01 opt]# 



About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK