完整数据库备份
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)