mysql进阶
2021/8/27 2:36:05
本文主要是介绍mysql进阶,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
完整数据库备份
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)
这篇关于mysql进阶的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-02MySQL 3主集群搭建
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解