数据库是用来存储数据库对象和数据的地方,数据库对象包括表(Table)、存储过程(StoredProcedure)、视图(View)、触发器(Trigger)等。在创建数据库对象之前需要先创建数据库。数据库备份是避免突如其来的数据破坏(如:黑客攻击、病毒袭击、硬件故障和人为误操作等),是提高数据安全性的重要措施之一,是恢复数据最容易和最有效的保证方法。
①理解数据库的概念和特点。
②掌握创建数据库的方法。
③掌握数据库属性的查看和修改方法。
④理解数据库备份的重要性。
⑤掌握数据库备份和恢复的方法。
⑥掌握数据库删除的方法。
数据目录用来存储MySQL在运行过程中所产生的数据,MySQL服务器程序在启动时,会加载数据目录下的一些文件。
数据目录对应着一个系统变量datadir,用户在使用客户端与服务器建立连接之后,可以使用下面命令查看datadir变量的值。
SHOWVARIABLESLIKE 'datadir';
执行上面语句后,查询到MySQL的数据目录为“C:\\ProgramData\\MySQL\\MySQLServer8.0\\Data\\”。
数据目录下主要有这些文件夹或文件。
MySQL创建数据库时,会在数据目录下创建一个与数据库同名的子文件夹。在数据库下创建表时,会在该子文件夹下创建一个表示该独立表空间的文件,文件名和表名相同,扩展名为.ibd。
MySQL启动时,会自动从该文件中获取server-uuid值,并将这个值存储在全局变量server_uuid中。如果该值或者该文件不存在,系统将会生成一个新的uuid值,并将该值保存在auto.cnf文件中。uuid的作用是在MySQL复制时如果发生故障,slave可以通过uuid辨识master的日志。
binlog.index用于记录MySQL产生的binlog日志的具体位置,binlog是MySQL记录所有操作的逻辑日志,主要用于故障恢复和主从同步。
*.pem文件用于ssl认证登录。
当MySQL数据库InnoDBBufferPool达到一定量级后,在因为异常造成宕机需要重启时,会面临一个严峻的问题,就是如何快速预热BufferPool,光靠InnoDB是不够的,这时就需要将InnoDBBufferPool进行存储,在数据文件中进行备份,重启时InnoDB直接读取此文件。
DoublewriteBuffer是一个存储,InnoDB将页写入InnoDB数据文件适当位置之前,会将缓冲池中页刷新到该存储中。如果操作系统存储子系统,或者mysqld进程在页写入中途崩溃,InnoDB可以在恢复中从DoublewriteBuffer中找到一份好的备份。
ibdata1文件是InnoDB默认共享表空间。
InnoDBRedo日志,区别于binlog,由于MySQL是一个支持多存储引擎共存的数据库,所以InnoDBRedo只记录InnoDB存储引擎的重做日志,并且Redo是一个物理日志,通过xid记录数据文件位置和binlog中的位置,而binlog记录的是MySQL全局的变化量,是一个逻辑日志。
ibtmp1文件是InnoDB临时表空间。
undo_001文件是InnoDBUndo表空间。
表2.1列出了SQL参考语法中使用的约定,并进行了说明。
表2.1 SQL语法约定
CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] db_name
CREATEDATABASE指创建具有给定名称的数据库。
CREATESCHEMA是CREATEDATABASE的同义词。如果数据库存在而没有指定IFNOTEXISTS,则会发生错误。
create_option指定数据库特征。数据库特征存储在数据字典中。
CHARACTERSET选项指定默认数据库字符集。
COLLATE选项指定默认的数据库排序规则。字符集规定了字符在数据库中的存储格式,比如占多少空间、支持哪些字符等,不同的字符集有不同的排序规则。在维护和使用MySQL数据库的过程中,选取合适的字符集非常重要,如果选择不恰当,轻则影响数据库性能,严重的甚至会导致数据存储乱码。数据库排序规则规定字符之间如何进行排序和比较。COLLATE会影响到ORDERBY语句的顺序,会影响到WHERE条件中大于、小于号筛选出来的结果。排序规则通常是和字符集相关的,一般来说,每种排序规则都有多种它所支持的字符集,并且每种字符集都指定一种排序规则为默认值。例如Latin1编码的默认COLLATE为latin1_swedish_ci,GBK编码的默认COLLATE为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci。
USE db_name
USE语句告诉MySQL使用命名数据库作为后续语句的默认(当前)数据库。
数据库备份是指从数据库或其事务日志中将数据或日志记录复制到备份设备(如磁盘),以创建数据备份或日志备份。数据库备份应定期进行,并执行有效的数据管理。
从物理与逻辑的角度分类,数据库备份分为物理备份和逻辑备份。从数据库的备份策略角度分类,数据库备份分为完整备份、差异备份和增量备份。
①物理备份:直接复制数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。物理备份又可分为:
冷备份(脱机备份):在数据库关闭状态下进行备份操作。
热备份(联机备份):在数据库处于运行状态时进行备份操作,该备份方法依赖数据库的日志文件。
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。
②逻辑备份:是对数据库逻辑组件(如表等数据库对象)的备份,这种类型的备份适用于可以编辑数据值或表结构,或者在不同的机器体系结构上重新创建数据。
①完整备份:每次对数据进行完整的备份,即对整个数据库的备份以及数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,完整备份还是差异备份与增量备份的基础。完整备份的备份与恢复操作都非常简单方便,但数据存在大量的重复,并且会占用大量的磁盘空间,备份时间也很长。
②差异备份:备份那些从上一次完整备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,随着时间的增长,需要备份的数据量会越来越大。恢复数据时,只需恢复上次的完整备份与最近一次的差异备份。
③增量备份:只有那些在上次完整备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次增量备份的时间为时间点,仅备份之后的数据变化,因此备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份开始到最近一次增量备份之间的所有增量一次恢复,如中间某次的备份数据损坏,将导致数据的丢失。
MySQLGUI工具(如MySQLWorkbench等)通常为备份MySQL数据库提供了便捷高效的功能。但是,如果数据库很大,则备份过程可能会非常缓慢,因为备份文件需要通过网络传输到客户端,而且若备份过程进展缓慢,那么MySQL数据库服务器的锁定时间则会增长,可用时间则会大幅度减少。
MySQL为了简化用户的备份操作,使用户能够在服务器上进行本地备份或转储MySQL数据库,提供了非常有用的工具,其中备份文件存储在服务器中的文件系统里,这意味着只需在需要时下载即可。
备份MySQL数据库的工具是mysqldump,位于MySQL安装文件夹下的bin文件夹中。mysqldump是由MySQL提供的程序,可用于备份数据库或将数据库传输到另一个数据库服务器。备份文件包含一组用于创建数据库对象的SQL语句。此外,mysqldump也可用于生成CSV、分隔符或XML文件。
备份MySQL数据库的命令如下:
mysqldump[–hlocalhost]-u[username]–p[password][database_name]>[dump_file.sql]
参数含义如下:
localhost:主机名。
username:有效的MySQL用户名。
password:用户的有效密码。请注意,-p和密码之间没有空格。
database_name:要备份的数据库名称。
dump_file.sql:要生成的备份文件。
通过执行上述命令,所有数据库结构和数据将导出到一个dump_file.sql备份文件中。
还原MySQL数据库的命令如下:
mysql[–hlocalhost]-u[username]–p[password][database_name]<[dump_file.sql]
ALTER { DATABASE | SCHEMA } [ db_name ]
alter_option...
alter_option:{
[ DEFAULT ] CHARACTER SET [ = ] charset_name
| [ DEFAULT ] COLLATE [ = ] collation_name
| [ DEFAULT ] ENCRYPTION [ = ] {'Y'|'N'}
| READ ONLY [ = ] { DEFAULT |0|1}
}
数据库创建后,用户可以根据需要修改数据库的字符集、排序规则等参数。
DROP { DATABASE | SCHEMA } [ IF EXISTS ] db_name
DROPDATABASE删除数据库中的所有表并删除数据库。
DROPSCHEMA是DROPDATABASE的同义词。