Docker中Mysql数据备份

Docker中Mysql数据备份

  • 1.创建备份用户
  • 2.准备测试数据
  • 3.完全备份
  • 4.知识点解析

1.创建备份用户

百度过程中,有人说用最高权限root直接备份,不可取不安全,所以单独创建一个用于备份的用户
学习–去看–Mysql 备份所需要的权限

1.进入Mysql容器
docker exec -it 40e25670af17 /bin/bash

2.进入mysql,-p 回车 输入密码(密码是隐式),再回车即登陆进去
mysql -uroot -p

3.创建用户 '账号'@'权限' IDENTIFIED BY '密码'
mysql> CREATE USER 'mysql_back'@'%' IDENTIFIED BY 'mysql_back';

4.查询用户,分别执行下面两句
mysql> use mysql;
mysql> select user from user;

+------------------+
| user             |
+------------------+
| mysql_back       |
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| root             |
+------------------+


5.设置普通权限 - 感觉不加也可以,主要是下面6的权限
mysql> GRANT all ON test_db.* TO 'mysql_back'@'%' WITH GRANT OPTION;
6.设置备份需要的权限,若未加,备份会报错
mysql> GRANT reload,REPLICATION CLIENT,select ON *.* TO 'mysql_back'@'%' WITH GRANT OPTION;

7.查询用户权限
 mysql> show grants for 'mysql_back'@'%';
 
+---------------------------------------------------------------------------------------+
| Grants for mysql_back@%                                                               |
+---------------------------------------------------------------------------------------+
| GRANT SELECT, RELOAD, REPLICATION CLIENT ON *.* TO `mysql_back`@`%` WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `test_db`.* TO `mysql_back`@`%` WITH GRANT OPTION             |
+---------------------------------------------------------------------------------------+

学习–去看后半部分–备份数据库需要的权限

2.准备测试数据

1.创建数据库
mysql> CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_general_ci;

2.查询数据库
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
| mysql              |
| performance_schema |
+--------------------+
12 rows in set (0.00 sec)

3.查询创建数据库完整语句
show create database test_db;
 
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                   |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
| test_db  | CREATE DATABASE `test_db` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+-----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

4.创建表,两句分开执行
mysql> use test_db;
mysql> create table tb_test ( id INT(11), name VARCHAR(25) );

5.查看表
mysql> show tables;

+-------------------+
| Tables_in_test_db |
+-------------------+
| tb_test           |
+-------------------+
1 row in set (0.00 sec)

6.插入数据
 mysql> insert into tb_test values  (1,"1"),(2,"2";
    
7.查询数据
mysql> select * from tb_test;

+------+------+
| id   | name |
+------+------+
|    1 | 1    |
|    2 | 2    |
+------+------+
4 rows in set (0.00 sec)

3.完全备份

1.备份命令
docker exec -it 40e25670af17 mysql -umysql_back -pmysql_back test_db < /data/docker/mysql-back/TestBackup.sql

2.备份完进入mysql 容器
docker exec -it 40e25670af17 /bin/bash

3.从宿主机 mysql-back 下的sql 复制内容到 容器内部 tmp 下
docker cp /data/docker/mysql-back/TestBackup.sql 40e25670af17:/tmp/

4.进入mysql,回车输入密码
mysql -uroot -p

5.使用test_db数据库
mysql> use test_db;

6.插入新数据
mysql> insert into tb_test values (3,'3a'),(4,'4a');

7.查询
mysql> select * from tb_test;
+------+------+
| id   | name |
+------+------+
|    1 | 1    |
|    2 | 2    |
|    3 | 3a   |
|    4 | 4a   |
+------+------+
4 rows in set (0.00 sec)

8.恢复 完全备份 数据
mysql> source /tmp/TestBackup.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
......
9.再次查询数据,发现恢复到插入新数据前
mysql> select * from tb_test;
+------+------+
| id   | name |
+------+------+
|    1 | 1    |
|    2 | 2    |
+------+------+
2 rows in set (0.00 sec)

4.知识点解析

数据库备份有哪些方式?
答:数据库备份分为 逻辑备份 与 物理备份,逻辑备份 分为 完全备份、差异备份、增量备份3种

学习–了解–数据库的两种备份方式:逻辑备份和物理备份
学习–了解–一分钟看懂完全备份、差异备份以及增量备份

.为什么给数据库用户设置了 all 权限,依旧需要额外再设置备份需要的权限?

答:因为 ALL PRIVILEGES 不包含备份用户需要的权限

ALL PRIVILEGES 包含
[
select,
insert,
update,
delete,
create,
drop,
references,
index,
alter,
create temporary tables,
lock tables,
execute,
create view,
show view,
create routine,
alter routine,
event,
trigger
]

2.备份语句解析
【
如果想备份全部数据库 --all-databases,/home/*.sql 备份的位置
mysqldump -u root -p密码 --all-databases> /home/0716_.sql;
】
【
这个语句中
mysqldump -uroot -p --single-transaction --master-data=2 --routines --flush-logs -B --all-databases > fullbackupfile28.sql

--single-transaction、 --master-data=2 表示一致性备份,一般一起使用不单用
--routines 备份函数触发器
--flush-logs备份前刷新日志(保证数据完全备份,若数据库开了二进制日志,则不需要使用该参数和一致性参数--single-transaction、 --master-data=2)
-B:最大的特点就是加入了库,数据恢复时不需要再创建库
】

学习–重要–Linux下MySQL数据库备份和恢复-定时任务
学习–Docker MySql 备份与还原
学习–docker MySQL数据库的备份与还原,以及每天定时自动备份
学习–linux下mysql数据库备份与恢复(全量+增量)

你可能感兴趣的:(docker,mysql)