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.每种主要的文件备份类型都可用作一系列差异备份的基准,例如:
作为一种最佳做法,差异备份的范围应与其基准的范围相同。因此,差异文件备份应基于包括同一组文件和(或)文件组的文件备份。
进行差异备份时通常不需要考虑特殊事项。但建议您注意以下这些情况:
1.一般恢复
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 密码
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)
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)