ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql进阶

2021-08-27 01:00:49  阅读:152  来源: 互联网

标签:OK 进阶 备份 数据库 sec mysql MariaDB id


完整数据库备份

1.完整数据库备份对整个数据库进行备份。这包括对部分事务日志进行备份,以便能够恢复完整数据库备份。完整数据库备份表示备份完成时的数据库。

2.数据库备份易于使用。完整数据库备份包含数据库中的所有数据。对于可以快速备份的小数据库而言,最佳方法就是使用完整数据库备份。但是,随着数据库的不断增大,完整备份需花费更多时间才能完成,并且需要更多的存储空间。因此,对于大型数据库而言,您可以用差异备份来补充完整数据库备份。有关详细信息,请参阅差异数据库备份。

注意:针对数据库备份,TRUSTWORTHY 设置为 OFF。有关如何将 TRUSTWORTHY 设置为 ON 的详细信息,请参阅ALTER DATABASE (Transact-SQL)。

3.在简单恢复模式下使用数据库备份

在简单恢复模式下,每次备份后,如果出现严重故障,数据库将有可能丢失工作。每次更新都会增加丢失工作的风险,这种情况将一直持续到下一次完整备份。这时,工作丢失风险将变为零,并开始新一轮的工作丢失风险。

在简单恢复模式下,备份之间的工作丢失风险随着时间的推移而增加。下图显示了仅使用完整数据库备份的备份策略的工作丢失风险。

下例说明了如何使用 WITH FORMAT 覆盖任意现有备份并创建新媒体集,从而创建一个完整数据库备份。然后,此示例将备份事务日志。在现实情况下,您必须执行一系列的定期日志备份。

-- Back up the AdventureWorks database to new media set.
BACKUP DATABASE AdventureWorks
    TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\BACKUP\AdventureWorksFullRM.bak' 
    WITH FORMAT;
GO

4.在完整恢复模式下使用数据库备份

对于使用完整恢复模式和大容量日志恢复模式的数据库而言,需要执行事务日志备份。下图显示了在完整恢复模式下可以使用的复杂性最小的备份策略。

注意:如果有两个或更多必须在逻辑上保持一致的完整恢复模式数据库,则最好执行特殊步骤,以确保这些数据库的可恢复性。有关详细信息,请参阅使用标记的事务(完全恢复模式)。

5.创建完整数据库备份

完整数据库备份应在单个操作中创建,并通常计划为按设定的间隔执行。

创建完整数据库备份所要求的 BACKUP 语法是:

BACKUP DATABASE database_name TO backup_device

差异备份

1.差异备份基于差异备份所包含数据的前一次最新完整备份。差异备份仅捕获自该次完整备份后发生更改的数据。这称为差异备份的“基准”**。差异备份仅包括建立差异基准后更改的数据。在 SQL Server 2005 中,差异文件备份的速度非常快,因为 SQL Server 数据库引擎会跟踪自创建差异基准之后所做的更改。

2.每种主要的文件备份类型都可用作一系列差异备份的基准,例如:

  • 差异数据库备份
  • 部分差异备份
  • 差异文件备份

作为一种最佳做法,差异备份的范围应与其基准的范围相同。因此,差异文件备份应基于包括同一组文件和(或)文件组的文件备份。

进行差异备份时通常不需要考虑特殊事项。但建议您注意以下这些情况:

  • 对某个只读数据库进行差异备份。对于只读数据库,单独使用完整备份比同时使用完整备份和差异备份更容易管理。有关详细信息,请参阅备份只读数据库。 完整备份和文件备份混在一起,这创建了多基准差异备份。
  • 您可以创建一个多基准差异备份,其范围将大于单基准备份。但是,多基准差异备份的还原较为复杂,除专家级用户之外,通常应避免使用这种方式。有关详细信息,请参阅使用多基准差异备份。
  • 需要在更改文件组的 IsReadOnly 属性之后执行部分差异备份。有关详细信息,请参阅差异部分备份。

恢复

1.一般恢复

  • mysqlbinlog --stop-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

2.基于位置的恢复

  • 恢复数据到指定位置 mysqlbinlog --stop-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

  • 从指定的位置开始恢复数据 mysqlbinlog --start-position=’操作 id’ 二进制日志 |mysql -u 用户名 -p 密码

3.基于时间点的恢复

  • 从日志开头截止到某个时间点的恢复 mysqlbinlog [–no-defaults] --stop-datetime=’年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

  • 从某个时间点到日志结尾的恢复 mysqlbinlog [–no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’

  • 从某个时间点到某个时间点的恢复 mysqlbinlog [–no-defaults] --start-datetime=’年-月-日 小时:分钟:秒’ --stop-datetime=’年-月-日小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码

Group by

1.GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用

group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面(重要)

MariaDB [zs]> create table test(a varchar(20),b varchar(20),c varchar(20));
Query OK, 0 rows affected (0.003 sec)

MariaDB [zs]> insert test value(1,'leile','kao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'kule','kao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'guile','kao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'sile','kao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'hello','nihao');
Query OK, 1 row affected (0.002 sec)

MariaDB [zs]> insert test value(1,'zhangsan','nihao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'wangwu','nihao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'wangwu','nihao');
Query OK, 1 row affected (0.002 sec)

MariaDB [zs]> insert test value(1,'wangwu','nihao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'wangwu','nihao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'leile','kao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> insert test value(1,'leile','kao');
Query OK, 1 row affected (0.001 sec)

MariaDB [zs]> select * from test;
+------+----------+-------+
| a    | b        | c     |
+------+----------+-------+
| 1    | leile    | kao   |
| 1    | kule     | kao   |
| 1    | guile    | kao   |
| 1    | sile     | kao   |
| 1    | hello    | nihao |
| 1    | zhangsan | nihao |
| 1    | wangwu   | nihao |
| 1    | wangwu   | nihao |
| 1    | wangwu   | nihao |
| 1    | wangwu   | nihao |
| 1    | leile    | kao   |
| 1    | leile    | kao   |
+------+----------+-------+
12 rows in set (0.001 sec)

MariaDB [zs]> select count(a),b from test group by b;
+----------+----------+
| count(a) | b        |
+----------+----------+
|        1 | guile    |
|        1 | hello    |
|        1 | kule     |
|        3 | leile    |
|        1 | sile     |
|        4 | wangwu   |
|        1 | zhangsan |
+----------+----------+
7 rows in set (0.000 sec)

MariaDB [zs]> select count(1),c from test group by c;
+----------+-------+
| count(1) | c     |
+----------+-------+
|        6 | kao   |
|        6 | nihao |
+----------+-------+
2 rows in set (0.000 sec)

inner by(内连接)、left join(左连接)、right by(右连接)

MariaDB [mysql]> create table tablea(id int,name varchar(30));
Query OK, 0 rows affected (0.002 sec)

MariaDB [mysql]> create table tableb(id int,job int,parent_id int);
Query OK, 0 rows affected (0.002 sec)

MariaDB [mysql]> insert tablea values(1,'zhangsan'),(2,'wangwu'),(3,'wangqing');
Query OK, 3 rows affected (0.002 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [mysql]> insert tableb values(1,24,1),(2,33,2),(3,35,4);
Query OK, 3 rows affected (0.002 sec)
Records: 3  Duplicates: 0  Warnings: 0

MariaDB [mysql]> select * from tablea;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | wangwu   |
|    3 | wangqing |
+------+----------+
3 rows in set (0.000 sec)

MariaDB [mysql]> select * from tableb;
+------+------+-----------+
| id   | job  | parent_id |
+------+------+-----------+
|    1 |   24 |         1 |
|    2 |   33 |         2 |
|    3 |   35 |         4 |
+------+------+-----------+
3 rows in set (0.000 sec)

内连接

MariaDB [mysql]> select tablea.*,tableb.* from tablea inner join tableb on tablea.id = tableb.parent_id;
+------+----------+------+------+-----------+
| id   | name     | id   | job  | parent_id |
+------+----------+------+------+-----------+
|    1 | zhangsan |    1 |   24 |         1 |
|    2 | wangwu   |    2 |   33 |         2 |
+------+----------+------+------+-----------+
2 rows in set (0.000 sec)

左连接

MariaDB [mysql]> select tablea.*,tableb.* from tablea left join tableb on tablea.id = tableb.parent_id;
+------+----------+------+------+-----------+
| id   | name     | id   | job  | parent_id |
+------+----------+------+------+-----------+
|    1 | zhangsan |    1 |   24 |         1 |
|    2 | wangwu   |    2 |   33 |         2 |
|    3 | wangqing | NULL | NULL |      NULL |
+------+----------+------+------+-----------+
3 rows in set (0.000 sec)

右连接

MariaDB [mysql]> select tablea.*,tableb.* from tablea right join tableb on tablea.id = tableb.parent_id;
+------+----------+------+------+-----------+
| id   | name     | id   | job  | parent_id |
+------+----------+------+------+-----------+
|    1 | zhangsan |    1 |   24 |         1 |
|    2 | wangwu   |    2 |   33 |         2 |
| NULL | NULL     |    3 |   35 |         4 |
+------+----------+------+------+-----------+
3 rows in set (0.000 sec)

标签:OK,进阶,备份,数据库,sec,mysql,MariaDB,id
来源: https://www.cnblogs.com/Aimmi/p/15192206.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有