MySQL数据库系统
一、MySQL服务基础
1、MySQL的编译安装
1、安装依赖软件和cmake包
2、源码编译及安装
创建运行用户
编译安装
-DCMAKEJNSTALL_PREFIX:指定将MySQL数据库程序安装到某目录下
-DSYSCONFDIR:指定初始化参数文件目录。
-DDEFAULT_CHARSET:指定默认使用的字符集编码,如utf-8。
-DDEFAULT_COLLATION:指定默认使用的字符集校对规则,utf8_general_ci是适用于utf-8 字符集的通用规则。
-DWITH_EXTRA_CHARSETS:指定额外支持的其他字符集编码。
3、安装后的其他调整
对数据库目录进行权限设置
建立配置文件
初始化数据库
设置环境变量
4、添加系统服务
注意:PIDFile=/usr/local/mysql/data/mysql.pid 中mysql.pid的mysql为主机名
启动mysqld服务
2、访问MySQL数据库
1、登录到MySQL服务器
未设置密码的root用户登录本机的MySQL数据库
有密码
2、执行MySQL操作语句
执行"STATUS;"语句可以查看当前数据库服务的基本信息
3、退出“mysql>”操作环境
二、使用MySQL数据库
1、查看数据库结构
1、查看当前服务器中有哪些库
2、查看当前使用的库中有哪些表
USE语句:切换到所使用的库
3、查看表的结构
或者指定”库名.表名”
2、创建及删除库和表
1、创建新的库
2、创建新的表
基本格式:CREATE TABLE 表名(字段1名称 类型,字段2名称 类型,…,PRIMARY KEY (主键名))
3、删除一个数据表
4、删除一个数据库
3、管理表中的数据记录
1、插入数据记录
语句格式:INSERT INTO 表名(字段1,字段2,…) VALUES(字段1的值,字段2的值,…)
向auth库中的users表插入一条记录:用户名为"zhangsan",对应的密码为 “123456”
当插入新的数据完整包括表中所有字段的值
2、查询数据记录
语句格式:SELECT 字段名1,字段名2,…FROM 表名 WHERE 条件表达式
显示所有的数据记录
查找users表中用户名为"zhangsan"的记录,显示其中用户名、密码字段的信息
3、修改数据记录
语句格式:UPDATE 表名 SET 字段名1=字段值1 [,字段名2=字段值2] WHERE 条件表达式
users表中用户名为“lisi"的记录,将密码字串设为空值
将数据库root用户的密码设为"123456",并刷新用户授权信息
在Linux命令行环境中时,将数据库用户root的密码设置为"12345678"
4、删除数据记录
语句格式:DELETE FROM 表名 WHERE 条件表达式
删除users表中用户名为"lisi”的数据记录
显示user字段为空的用户记录,并用DELETE语句进行该用户记录的删除
三、数据库用户授权
1、授予权限
语句格式:GRANT 权限列表 ON 库名.表名 TO 用户名@来源地址[IDENTIFIED BY,密码,]
权限列表:用于列出授权使用的各种数据库操作,以逗号进行分隔, 使用"all”表示所有权限,可授权执行任何操作。
库名.表名:用于指定授权操作的库和表的名称,其中可以使用通配符“※” ,使用 "auth.*“表示授权操作的对象为auth库中的所有表。
用户名。来源地址:用于指定用户名称和允许访问的客户机地址,即谁能连接、能从哪里连接。来源地址可以是域名、IP地址,还可以使用”%"通配符,表示某个区域或网段内的所有地址
IDENTIFIED BY:用于设置用户连接数据库时所使用的密码字符串。在新建用户时,若省略IDENTIFIED BY"部分,则用户的密码将为空。
添加一个名为"xsqi"的数据库用户,并允许其从本机访问,对auth库中的所有表具有查询权限,验证密码为"123456"
切换到其他Shell终端,以用户xiaoqi的身份连接数据库查询auth库中users表的数据记录
查询其他库中的表的记录被拒绝
新建school库,并授权从IP地址为192.168.4.19的主机连接,用户名为"teacher”,密码为"pwd@123", 允许在school库中执行所有操作。
2、查看权限
语句格式:SHOW GRANTS FOR 用户名@来源地址
查看用户teacher从主机192.168.4.19访问数据库时的授权信息
3、撤销权限
语句格式:REVOKE 权限列表 ON 数据库名.表名 FROM 用户名@来源地址
撤销用户xiaoqi从本机访问数据库auth的所有权限
四、MySQL完全备份与恢复
1、数据库备份概述
1、数据库备份类型
从物理与逻辑的角度
冷备份:在数据库关闭状态下进行备份操作。
热备份:在数据库处于运行状态时进行备份操作,该备份方法依赖数据库的日志文件。
温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。
从数据库的备份策略角度
完全备份:每次对数据进行完整的备份,即对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,是差异备份与增量备份的基础。
差异备份:备份那些自从上次完全备份之后被修改过的所有文件,备份的时间节点是从上次完整备份起,备份数据量会越来越大。恢复数据时,只需恢复上次的完全备份与最近的一次差异备份。
增量备份:只有那些在上次完全备份或者增量备份后被修改的文件才会被备份。以上次完整备份或上次的增量备份的时间为时间点,仅备份这之间的数据变化,因而备份的数据量小,占用空间小,备份速度快。但恢复时,需要从上一次的完整备份开始到最后一次增量备份之间的所有增量依 次恢复,如中间某次的备份数据损坏,将导致数据的丢失。
2、数据库完全备份操作
1、物理冷备份与恢复
备份数据库
恢复数据库
2、mysqldump备份与恢复
(1)备份数据库
格式1:备份指定库中的部分表。
mysqldump [选项]库名[表名1][表名2] … > /备份路径/备份文件名
将mysql库中的user表导出为mysql-user.sql
格式2:备份一个或多个完整的库(包括其中所有的表)。
mysqldump [选项]–databases 库名1 [库名2]…>/备份路径/备份文件名
将整个auth库导出为auth.sql 文件
格式3:备份MySQL服务器中所有的库。
mysqldump [选项]–all-databases > /备份路径/备份文件名
创建备份文件all-data.sql,其中包括 MySQL服务器中的所有库
(2)查看备份文件
(3)恢复数据库
命令格式:mysql [选项][库名][表名]< /备份路径/备份文件名
从备份文件mysql-user.sql中将表导入test库
备份文件auth.sql恢复auth库
五、MySQL增量备份与恢复
常用的增量恢复的方法有三种:一般恢复、基于位置的恢复、基于时间点的恢复
1、基本概念
1、—般恢复:将所有备份的二进制日志内容全部恢复
命令格式:mysqlbinlog [–no-defaults] 增量备份文件 | mysql -u 用户名 -p
2、基于位置的恢复
格式1:恢复数据到指定位置:
mysqlbinlog --stop-position=‘操作id’ 二进制日志 | mysql -u 用户名 -p 密码
格式2:从指定的位置开始恢复数据:
mysqlbinlog --start-position=‘操作id’ 二进制日志 | mysql -u 用户名 -p 密码
3、基于时间点的恢复
格式1:从日志开头截止到某个时间点的恢复
mysqlbinlog [–no-defaults] --stop-datetime=‘年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码
格式2:从某个时间点到日志结尾的恢复。
mysqlbinlog [–no-defaults] --start-datetime=‘年-月-日 小时:分钟:秒’ 二进制日志 | mysql -u 用户名 -p 密码
I mysql -u用户名-p密码
格式3:从某个时间点到某个时间点的恢复。
mysqlbinlog [–no-defaults] --start-datetime=‘年-月-日 小时:分钟:秒’ --stop-datetime=‘年-月-日小时:分钟:秒,二进制日志 | mysql -u 用户名 -p 密码
2、一般恢复
1、添加数据库、表,录入信息
2、开启二进制日志功能
3、先进行一次完全备份
4、继续录入新的数据并进行增量备份
刷新二进制日志
模拟误操作删除user_info表
5、恢复操作
恢复完全备份
恢复增量备份
3、基于位置恢复
1、模拟误操作删除user_info表
恢复完全备份
查看二进制日志文件的具体内容
在操作ID为"460"的时候,user_info表中插入了 "sunqi"的用户数据
恢复到操作ID为’'460"之前的数据,即不恢复"孙七"的信息
恢复到操作ID为’'460"之后到结束的数据,即仅恢复"孙七"的信息,跳过 "赵六"的信息恢复
4、基于时间点恢复
恢复到22:56 : 15之前的数据,即不恢复"孙七"的信息
仅恢复"孙七"的信息,跳过"赵六"的信息恢复