MySQL实例管理
1. MySQL实例的创建
本课程将带领您在已经部署 SequoiaDB 巨杉数据库引擎及安装了 SequoiaSQL-MySQL 程序的环境中,创建 MySQL 实例及数据库和数据表,并向数据表中写入数据进行测试。
请点击右侧选择使用的实验环境
环境架构:
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-MySQL 数据库实例节点, 1 个引擎协调节点, 1 个编目节点与 3 个数据节点。
切换用户及查看数据库版本
切换至部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户并查看数据库引擎版本。
切换到 sdbadmin 用户
su - sdbadmin
用户 sdbadmin 的密码为 sdbadmin
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
创建 MySQL 实例
此实验环境已经安装了 SequoiaSQL-MySQL 程序,我们直接添加 MySQL 实例。
1)切换到 SequoiaSQL-MySQL 安装目录;
cd /opt/sequoiasql/mysql
2)添加实例;
bin/sdb_sql_ctl addinst myinst -D database/3306/
指定实例名为 myinst,该实例名映射相应的数据目录和日志路径,用户可以根据自己需要指定不同的实例名,实例默认端口号为 3306 。
3)查看实例,可以看到实例名为 myinst 的数据和日志目录信息;
bin/sdb_sql_ctl listinst
图片描述
4)查看实例状态;
bin/sdb_sql_ctl status
创建数据库及数据表
进入 MySQL shell ,连接 SequoiaSQL-MySQL 实例并创建 company 数据库实例,验证实例的创建及使用是否成功。
创建数据库
1)登录 MySQL Shell;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
2)在 MySQL 实例中创建新数据库 company,并切换到 company;
CREATE DATABASE company; USE company;
3)查看 MySQL 实例中的数据库;
SHOW DATABASES;
创建分区表
在 SequoiaSQL-MySQL 实例中创建的表将会默认使用 SequoiaDB 数据库存储引擎,包含主键或唯一键的表将会默认以唯一键作为分区键,进行自动分区。
1)在 MySQL 实例的 company 数据库中创建数据表 employee;
CREATE TABLE employee ( empno INT, ename VARCHAR(128), age INT, PRIMARY KEY (empno) ) ENGINE = sequoiadb COMMENT = "雇员表, sequoiadb: { table_options: { ShardingKey: { 'empno': 1 }, ShardingType: 'hash', 'Compressed': true, 'CompressionType': 'lzw', 'AutoSplit': true, 'EnsureShardingIndex': false } }";
2)查看数据库引擎;
SHOW ENGINES;
3)查看 company 数据库中创建分区表 employee;
SHOW CREATE TABLE employee;
数据表中写入数据并查询
在 SequoiaSQL-MySQL 实例中创建的表完全兼容MySQL语法和协议,用户可以使用SQL语句访问 SequoiaDB 数据库,完成对数据的增、删、查、改操作以及其他MySQL语法操作。
1)在分区表 employee 中插入数据;
INSERT INTO employee VALUES (10001, 'Georgi', 48); INSERT INTO employee VALUES (10002, 'Bezalel', 21);
2)查询分区表 employee 中的数据;
SELECT * FROM employee;
2. MySQL实例的高可用配置
课程介绍
SequoiaSQL-MySQL 的架构使集群中的多个 MySQL 实例均为主机模式,都可独立对外提供读写服务。由于各实例的元数据都只存储在该实例本身,于是 SequoiaSQL-MySQL 提供了元数据同步工具,用来保证 MySQL 服务的高可用。当一个 MySQL 实例退出后,连接该实例的应用可以切换到其它实例,获得对等的读写服务。
本课程将带领您在2台机器中展示 MySQL 进行实例高可用的配置,其中1台已经部署 SequoiaDB 巨杉数据库引擎及创建了 MySQL 实例的环境,另外一台只安装了 MySQL 实例组件。
请点击右侧选择使用的实验环境
MySQL 元数据同步工具架构
MySQL 元数据同步工具的基本原理是 MySQL 服务进程通过审计插件输出审计日志,元数据同步工具从审计日志中提取 SQL 语句,连接到其它 MySQL 实例执行,以达到元数据同步的目的。包含元数据同步工具的集群架构如下:
图片描述
在上图中,meta_sync 即同步工具进程,每一个 MySQL 实例都有一个对应的同步工具在运行。它独立于 MySQL 服务进程运行,对 MySQL 的审计日志文件 server_audit.log 进行分析处理。由于用户的业务数据存储于底层的 SequoiaDB 数据库集群中,因此只要 MySQL 层的元数据在各实例间完成同步,连接 MySQL 实例的客户端就可以访问到一致的数据,这就为 MySQL 服务提供了高可用能力。
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例均为 3.4 版本。
换用户及查看数据库版本
切换至部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户并查看数据库引擎版本。
切换到 sdbadmin 用户
su - sdbadmin
用户 sdbadmin 的密码为 sdbadmin
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
查看服务状态
检查课程涉及的 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 程序是否运行正常。
检查 SequoiaDB 巨杉数据库节点列表
查看 SequoiaDB 巨杉数据库引擎节点列表:
sdblist
如果显示的节点数量与预期不符,请稍等节点初始化完成并重试该步骤。
查看本机 MySQL 实例
1)切换到 SequoiaSQL-MySQL 安装目录;
cd /opt/sequoiasql/mysql
2)查看实例名;
bin/sdb_sql_ctl listinst
图片描述
3)查看对应实例是否启动;
bin/sdb_sql_ctl status
显示 PID 值不为空说明实例已经运行中。
查看远程机器 MySQL 实例
1)登录 sdbserver2 远程服务器;
ssh sdbadmin@sdbserver2
用户 sdbadmin 的密码为 sdbadmin
2)查看实例名;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl listinst
命令未发现存在的实例名,说明仅安装 SequoiaSQL-MySQL 实例组件。
3)退出 sdbserver2 远程服务器;
exit
部署元数据同步工具
进行元数据同步的 MySQL 实例均要设置相同的用户名和密码,故需连接两个 MySQL 实例进行相应的设置,本步骤展示对本机的 MySQL 实例进行设置。
创建数据库同步的用户
1)登录 MySQL Shell,连接本机的 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
2)创建用于同步元数据的 MySQL 用户;
CREATE USER 'sdbadmin'@'%' IDENTIFIED BY 'sdbadmin';
3)授予所有权限,用户名与密码在所有实例上保持一致;
GRANT ALL ON *.* TO 'sdbadmin'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
此处使用的密码 sdbadmin 仅为示例,请根据需要自行的需要设置安全的密码。
4)查询数据库用户的权限;
SHOW GRANTS FOR sdbadmin;
5)退出 MySQL Shell ;
\q
6)使用 sdbadmin 用户重新登陆 MySQL ,如果进入 MySQL Shell 说明密码设置成功;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -usdbadmin -psdbadmin
7)退出 MySQL Shell ;
\q
审计插件部署
进行元数据同步的 MySQL 实例均要部署审计插件,本步骤将展示对本机实例进行设置。
审计插件准备
1)检查 MySQL 安装目录下 tools/lib 目录的审计插件;
ls /opt/sequoiasql/mysql/tools/lib/server_audit.so
2)检查 MySQL 安装目录下 lib/plugin 目录的审计插件;
ls /opt/sequoiasql/mysql/lib/plugin/server_audit.so
文件不存在,需要给 SequoiaSQL-MySQL 配置数据库审计日志。
3)将审计插件 server_audit.so 文件复制到 MySQL 安装目录中的 lib/plugin 目录下;
cp /opt/sequoiasql/mysql/tools/lib/server_audit.so /opt/sequoiasql/mysql/lib/plugin/
4)赋予 MySQL 运行用户的可执行权限;
chmod a+x /opt/sequoiasql/mysql/lib/plugin/server_audit.so
5)检查 MySQL 安装目录下 lib/plugin 目录的审计插件是否存在;
ls -lat /opt/sequoiasql/mysql/lib/plugin/server_audit.so
操作截图: 图片描述
审计插件配置
1)修改 MySQL 实例的配置文件;
echo 'plugin-load=server_audit=server_audit.so' >> /opt/sequoiasql/mysql/database/3306/auto.cnf echo 'server_audit_logging=ON' >> /opt/sequoiasql/mysql/database/3306/auto.cnf echo 'server_audit_file_path=/opt/sequoiasql/mysql/database/auditlog/server_audit.log' >> /opt/sequoiasql/mysql/database/3306/auto.cnf echo 'server_audit_file_rotate_now=OFF' >> /opt/sequoiasql/mysql/database/3306/auto.cnf echo 'server_audit_file_rotate_size=10485760' >> /opt/sequoiasql/mysql/database/3306/auto.cnf echo 'server_audit_file_rotations=999' >> /opt/sequoiasql/mysql/database/3306/auto.cnf echo 'server_audit_output_type=file' >> /opt/sequoiasql/mysql/database/3306/auto.cnf echo 'server_audit_query_log_limit=102400' >> /opt/sequoiasql/mysql/database/3306/auto.cnf
add server_audit.so config :加载审计插件;
plugin-load=server_audit=server_audit.so :审计记录的审计,建议只记录需要同步的DCL和DDL操作 server_audit_events=CONNECT,QUERY_DDL,QUERY_DCL ;
server_audit_logging=ON :开启审计;
server_audit_file_path=/opt/sequoiasql/mysql/database/auditlog/server_audit.log :审计日志路径及文件名 ;
server_audit_file_rotate_now=OFF :强制切分审计日志文件 ;
server_audit_file_rotate_size=10485760 :审计日志文件大小10MB,超过该大小进行切割,单位为byte ;
server_audit_file_rotations=999 :审计日志保留个数,超过后会丢弃最旧的 ;
server_audit_output_type=file : 输出类型为文件 ;
server_audit_query_log_limit=102400 :限制每行查询日志的大小为100kb,若表比较复杂,对应的操作语句比较长,建议增大该值 ;
2)创建审计日志存放的文件夹;
mkdir /opt/sequoiasql/mysql/database/auditlog/
重启 MySQL 实例并检查审计日志
1)检查 MySQL 实例;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl listinst
操作截图: 图片描述
2)重启 MySQL 实例;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl restart myinst
操作截图: 图片描述
3)检查 MySQL 实例进程;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl listinst
操作截图: 图片描述
4)检查审计日志文件目录,确保生成了审计日志文件 server_audit.log;
ls -alt /opt/sequoiasql/mysql/database/auditlog/
安装配置 sdbserver2 元数据同步工具
以上步骤已经完成 sdbserver1 的 MySQL 元数据同步工具部署和配置,本章将对 sdbserver2 进行设置。
登录 sdbserver2 创建实例
1)登录 sdbserver2 远程服务器;
ssh sdbadmin@sdbserver2
用户 sdbadmin 的密码为 sdbadmin
2)进入 SequoiaSQL-MySQL 实例安装目录;
cd /opt/sequoiasql/mysql
3)创建数据库实例;
bin/sdb_sql_ctl addinst myinst -D database/3306/
4)查看实例;
bin/sdb_sql_ctl status
5)设置本实例连接巨杉数据库的协调节点;
sed -i 's/# sequoiadb_conn_addr=localhost:11810/sequoiadb_conn_addr=172.17.0.1:11810/g' database/3306/auto.cnf
6)重启 MySQL 实例;
bin/sdb_sql_ctl restart myinst
7)查看 MySQL 实例状态;
bin/sdb_sql_ctl status
操作截图:
图片描述
安装配置 sdbserver2 元数据同步工具
需要在 sdbserver2 重复以下步骤 ,点击左下角章节图标,根据弹出内容选择对应章节。
- 创建元数据同步用户
- 审计插件部署
- 部署元数据同步工具
验证元数据同步情况
进入 MySQL shell ,连接 SequoiaSQL-MySQL 实例并创建 company 数据库,并创建数据表。
登录 MySQL shell
登录 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
创建数据库
创建数据库;
CREATE DATABASE company; USE company;
创建数据表,并写入数据
1)创建包含自增主键字段的 employee 表;
CREATE TABLE employee ( empno INT AUTO_INCREMENT PRIMARY KEY, ename VARCHAR(128), age INT );
2)写入数据;
INSERT INTO employee (ename, age) VALUES ("Jacky", 36); INSERT INTO employee (ename, age) VALUES ("Alice", 18);
3)查询数据;
SELECT * FROM employee;
4)退出 MySQL Shell;
\q
5)退出 sdbserver2 机器;
exit
验证 sdbserver1 的 MySQL 实例元数据同步情况
1)登录 MySQL Shell ;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -usdbadmin -psdbadmin
2)查看数据库,可以看到 company 数据库已经同步创建;
SHOW DATABASES;
操作截图:
图片描述
3) 切换数据库;
USE company;
4)查询 employee 表;
SELECT * FROM employee;
5)退出 MySQL Shell;
\q
总结
本课程我们学会了 MySQL 实例的高可用配置并进行了验证,包括创建数据库用户、审计插件部署和元数据同步工具部署
3. MySQL实例事务管理
课程介绍
事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务。本课程主要讲解 MySQL 事务的基本操作。
事务的 ACID 属性
原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性:事务处理结束后,对数据的修改操作就是永久的,即便系统故障也不会丢失。
本课程中 SequoiaDB 巨杉数据库的集群由一个 SQL 引擎和一组三分区单副本的巨杉数据库引擎组成;其中,SQL引擎包括 1 个 SequoiaSQL-MySQL 数据库实例节点,数据库引擎包括 1 个协调节点、1 个编目节点和 3 个数据节点。
请点击右侧选择使用的实验环境
环境架构:
图片描述
详细了解 SequoiaDB 巨杉数据库系统架构:
SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例均为 3.4 版本。
切换用户及查看数据库版本
切换至部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户并查看数据库引擎版本。
切换到 sdbadmin 用户
su - sdbadmin
用户 sdbadmin 的密码为 sdbadmin
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
操作截图:
图片描述
查看节点启动列表
查看 SequoiaDB 巨杉数据库引擎节点列表:
sdblist
操作截图:
图片描述
Note:
如果显示的节点数量与预期不符,请稍等节点初始化完成并重试该步骤。
检查 MySQL 实例进程
1)查看 MySQL 数据库实例;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl listinst
操作截图:
图片描述
2)查看数据库实例进程;
ps -elf | grep mysql
事务提交与回滚
SequoiaDB 巨杉数据库的 MySQL 数据库实例支持完整的事务操作能力,本小节将验证其基本的回滚与提交能力。
执行事务提交操作
1)开启事务操作;
BEGIN;
2)执行SQL语句,包含写入与更新;
INSERT INTO employee (ename, age) VALUES ("Ben", 25); UPDATE employee SET age = 22 WHERE ename = "Alice";
3)执行事务提交操作;
COMMIT;
事务提交操作的结果验证
查询数据,验证事务提交的数据结果,是否写入与更新成功。
SELECT * FROM employee;
操作截图:
图片描述
如操作截图显示,事务内的操作均被提交成功:雇员 Ben 的信息已经写入,并且 Alice 的年龄被更新成功。
执行事务回滚操作
1)开启事务操作;
BEGIN;
2)执行SQL语句,主要包含插入与更新;
INSERT INTO employee (ename, age) VALUES ("Janey", 27); UPDATE employee SET age = 26 WHERE ename = "Ben";
3)执行事务回滚操作;
ROLLBACK;
事务回滚操作的结果验证
查询数据,验证事务回滚后的数据结果;
SELECT * FROM employee;
操作截图:
图片描述
如操作截图显示,雇员 Janey 的信息未写入到数据库;而 Ben 的年龄也没有更新。
MySQL 实例事务管理
MySQL 实例的事务是基于 SequoiaDB 巨杉数据库存储引擎的,如果需要 MySQL 实例支持事务,存储引擎也必须开启事务,本小节将讲解如何查看并关闭 MySQL 的事务功能,并对关闭事务功能后的 MySQL 实例进行验证。
1)查看 MySQL 是否已打开事务;
SHOW VARIABLES LIKE '%sequoiadb_use_transaction%';
操作截图:
图片描述
图片中 sequoiadb_use_transaction 参数的值为 on ,说明事务功能已经打开。
2)退出 MySQL Shell;
\q
3)关闭 MySQL 的事务功能;
cat >> /opt/sequoiasql/mysql/database/3306/auto.cnf << EOF sequoiadb_use_transaction = OFF EOF
4)重启 myinst 实例;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl restart myinst
操作截图:
图片描述
5)登录 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
6)切换到 company 数据库;
USE company;
7)开启事务操作;
BEGIN;
8)执行SQL语句,主要包含插入与更新;
INSERT INTO employee (ename, age) VALUES ("GOGO", 55);
9)执行事务回滚操作;
ROLLBACK;
10)查询 employee 表的数据,验证事务数据是否回滚;
SELECT * FROM employee;
操作截图:
Note:由图可见刚刚插入的数据,说明 MySQL 的事务功能已经关闭,数据库没有执行回滚操作
4. 数据库实例导入导出
课程介绍
本课程主要讲解基于 SequoiaSQL-MySQL 实例的数据导入以及导出操作, 而其中就包含 CSV 格式导入导出和基于 mysqldump 工具的导入导出两种原生 MySQL 数据库所支持的方式。
请点击右侧选择使用的实验环境
环境架构
本课程中 SequoiaDB 巨杉数据库的集群拓扑结构为三分区单副本,其中包括:1 个 SequoiaSQL-MySQL 数据库实例节点, 1 个引擎协调节点, 1 个编目节点与 3 个数据节点。
图片描述
如若详细了解 SequoiaDB 巨杉数据库系统架构请点击以下链接:
SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例均为 3.4 版本。
CSV 导出
添加 MySQL 数据库导入导出的路径配置,然后进行数据库 CSV 格式数据的导出。
导出导入参数配置
1)在 auto.cnf 文件中加入导入导出路径的参数配置;
cat >> /opt/sequoiasql/mysql/database/3306/auto.cnf << EOF secure_file_priv = "/opt/sequoiasql/mysql/tmp" EOF
2)创建存放数据路径;
mkdir /opt/sequoiasql/mysql/tmp
secure_file_priv默认为NULL, 表示不允许导入导出操作,需要在配置文件中进行更改。
3)重启 MySQL 数据库实例;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl restart myinst
操作截图:
图片描述
登录到 MySQL 实例
4)登录 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
CSV格式数据导出
1)进行创建并使用 company 数据库;
CREATE DATABASE company; USE company;
2)创建包含自增主键字段的 employee 表;
CREATE TABLE employee ( empno INT AUTO_INCREMENT PRIMARY KEY, ename VARCHAR(128), age INT );
3)插入数据并执行查询;
INSERT INTO employee (ename, age) VALUES ("Jacky", 36); INSERT INTO employee (ename, age) VALUES ("Alice", 21); SELECT * FROM employee;
4)执行 sql 语句进行导出, 其中字段以逗号(,)分隔,以双引号(")作为字符串标识符,以回车换行(\r\n)作为记录分割符;
SELECT * FROM employee INTO OUTFILE '/opt/sequoiasql/mysql/tmp/employee_export.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
操作截图:
图片描述
5)退出 MySQL 实例;
\q
导出的 CSV 格式数据检查
6)检查导出的数据;
cat /opt/sequoiasql/mysql/tmp/employee_export.csv;
mysqldump 导出
通过 mysqldump 导出可直接由 MySQL Shell 执行导入的 sql 数据文件。
mysqldump 导出
1)mysqldump 工具导出,路径为
(/opt/sequoiasql/mysql/tmp/employee_import_test.sql);
/opt/sequoiasql/mysql/bin/mysqldump -h 127.0.0.1 -u root company employee_import_test > /opt/sequoiasql/mysql/tmp/employee_import_test.sql
Note:
mysqldump 导出的是 SQL 逻辑执行语句, 其有比较多的参数命令,可通过 mysqldump --help 罗列其中的参数进行查看
2)mysqldump工具导出数据检查;
cat /opt/sequoiasql/mysql/tmp/employee_import_test.sql
mysqldump 导入
通过 mysqldump 直接导入 sql 数据文件并进行数据校验。
清理数据表
1)登录 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
2)删除表 employee_import_test,为后面导入测试做准备;
USE company; DROP TABLE employee_import_test;
mysqldump 工具导入
1)mysqldump 导出后生成的文件是sql语句的集合,可以直接执行;
SOURCE /opt/sequoiasql/mysql/tmp/employee_import_test.sql;
mysqldump 工具导入检查
2)导入数据检查;
USE company; SELECT * FROM employee_import_test;
Note:
因为我们导出的是数据表, 所以导入的时候, 需要选择好相应的数据库。
5. 数据库实例备份恢复
课程介绍
本课程主要讲解利用 MySQL 的 mysqldump 逻辑备份工具进行 MySQL 数据库实例备份恢复操作,并对 mysqldump 工具进行讲解。
请点击右侧选择使用的实验环境
mysqldump 工具介绍
mysqldump 是 MySQL 自带的逻辑备份工具。它的备份原理是,通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的 insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。优缺点如下:
mysqldump 的优点: 简单灵活,备份空间小,数据格式清晰,方便编辑,可以进行不同级别备份,全局、单库、单表;可以进行一致性备份,适用于轻量级规模的场景。
mysqldump的缺点: 备份的过程是串行化的,不会并行的进行备份,所以速度较慢,如果想要并行备份,可以使用 mydumper。
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例均为 3.4 版本。
###查看节点启动列表
查看 SequoiaDB 巨杉数据库引擎节点列表:
sdblist
操作截图:
图片描述
Note:
如果显示的节点数量与预期不符,请稍等节点初始化完成并重试该步骤。
###检查 MySQL 实例进程
1)查看 MySQL 数据库实例
/opt/sequoiasql/mysql/bin/sdb_sql_ctl listinst
操作截图:
图片描述
2)查看数据库实例进程
ps -elf | grep mysql
操作截图:
图片描述
###数据备份
数据库备份功能,是一种最直接、有效确保数据安全的方法,MySQL 实例支持原生 MySQL 数据备份方法。
备份单库几个表
1)mysqldump 工具按表导出,路径为
(/opt/sequoiasql/mysql/tmp/employee.sql); /opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
2)创建 company 数据库;
CREATE DATABASE company; USE company;
3)创建包含自增主键字段的 employee 表;
CREATE TABLE employee ( empno INT AUTO_INCREMENT PRIMARY KEY, ename VARCHAR(128), age INT );
4)插入数据并执行查询;
INSERT INTO employee (ename, age) VALUES ("Jacky", 36); INSERT INTO employee (ename, age) VALUES ("Alice", 21); SELECT * FROM employee;
5)退出MySQL Shell 界面;
\q
6)进行数据备份;
mkdir /opt/sequoiasql/mysql/tmp /opt/sequoiasql/mysql/bin/mysqldump -h 127.0.0.1 -u root company employee > /opt/sequoiasql/mysql/tmp/employee.sql
mysqldump 导出的是 sql 执行语句,包含数据。 其中导出的命令包含以下示例命令:
备份所有库: mysqldump -h 127.0.0.1 -u root -p -A > tmp/employee_import_test.sql
备份单个库所有表: mysqldump -h 127.0.0.1 -u root -p -B 库名> tmp/employee_import_test.sql
备份单个库单个表: mysqldump -h 127.0.0.1 -u root -p 库名 表名> tmp/employee_import_test.sql
备份单个库某几个表: mysqldump -h 127.0.0.1 -u root -p 库名 表名 表名> tmp/employee_import_test.sql
7)数据检查;
cat /opt/sequoiasql/mysql/tmp/employee.sql
Note: 因为内容较多, 仅截了图中的部分内容
1)创建备份数据存放文件夹;
cd /opt/sequoiasql/mysql/bin mkdir /home/sdbadmin/mysqlbak
备份单库单表
2)备份单个库单个表;
mysqldump -h 127.0.0.1 -u root company employee> /home/sdbadmin/mysqlbak/company_employee.sql
备份单个库
3)备份单个库所有表;
mysqldump -h 127.0.0.1 -u root -B company> /home/sdbadmin/mysqlbak/company.sql
备份所有库
4)备份所有库;
mysqldump -h 127.0.0.1 -u root -A > /home/sdbadmin/mysqlbak/all.sql
数据恢复
在 MySQL Shell 里面直接执行由 mysqldump 导出的 sql 文件进行数据恢复操作。
数据恢复操作
1)登录 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
2)删除 company 数据库;
DROP DATABASE company;
Note:
在恢复数据前需删除数据库以便查看数据恢复操作。
3)检查 company 数据库是否已经删除;
USE company;
操作截图:
4)进行数据恢复,mysqldump 导出后生成的文件是 sql 语句的集合,可以直接执行;
SOURCE /home/sdbadmin/mysqlbak/all.sql;
mysqldump 工具恢复检查
1)mysqldump 导出后生成的文件是sql语句的集合,可以直接执行;
USE company; SELECT * FROM employee;
Note: 因为我们导出的是数据表, 所以导入的时候, 需要选择好相应的数据
6. 执行计划分析
课程介绍
本课程主要讲解 SequoiaSQL-MySQL 实例的执行计划分析,其中会通过存储过程构造数据,mysqldumpslow 分析慢查询日志, 最后再结合执行计划进行分析。
请点击右侧选择使用的实验环境
###执行计划分析
通过 mysqldumpslow 只能找出慢SQL,分析一条SQL为什么执行慢需要查看它的执行计划。在MySQL中,可以通过 explain 命令查看一条sql的执行计划。而执行 explain 的分析指标解释如下:
id:记录 select 序列号,有几个 select 就有几个 id,id 的顺序按select 出现的顺序递增
table:执行计划所在的表,可能是实际存在的,也可能是临时表,临时表由系统起名
select_type:表示 select 的类型,常见取值如下:
类型 说明
SIMPLE 简单表,不使用表连接或子查询
PRIMARY 主查询,即外层的查询
UNION UNION中的第二个或者后面的查询语句
SUBQUERY 子查询中的第一个
partitions:如果查询是基于分区表的话,会显示查询将访问的分区
possible_keys:可能用到的索引
key:实际用到的索引,这个字段很重要,如果实际key为空,想强制使用前面的possible_keys,可以在查询中使用force index
key_len:索引的长度,一般规律是所用到索引的列数越多,key_len 越长,SQL的性能也越佳
ref:显示在key列记录的索引中,表查找值所用到的列或常量,该列不需要太过关注
rows:读取并扫描的行数,行数越少,效率越高
filtered:存储引擎返回的数据在 server 层过滤后,剩下多少满足查询的记录数量的比例(百分比)
extra:额外信息,主要是不适合在其他列中显示,但十分重要的信息,比如下压给引擎的条件
type:这一列表示关联类型或访问类型,即 MySQL 决定如何查找表中的行
type 取值有如下几种,依次从最优到最差分别为:NULL > system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例均为 3.4 版本。
切换用户及查看数据库版本
切换至部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户并查看数据库引擎版本。
切换到 sdbadmin 用户
su - sdbadmin
Note:
用户 sdbadmin 的密码为 sdbadmin
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
操作截图:
查看节点启动列表
查看 SequoiaDB 巨杉数据库引擎节点列表:
sdblist
操作截图:
图片描述
如果显示的节点数量与预期不符,请稍等节点初始化完成并重试该步骤。
检查 MySQL 实例进程
1)查看 MySQL 数据库实例;
/opt/sequoiasql/mysql/bin/sdb_sql_ctl listinst
操作截图:
图片描述
2)查看数据库实例进程;
ps -elf | grep mysql
创建数据库及数据表
创建 company 数据库和 employee 数据表用于后续小节分析执行计划。
1)登录 MySQL Shell 连接 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
2)在 MySQL 实例中创建新数据库 company,并切换到 company;
CREATE DATABASE company; USE company;
3)在 MySQL 实例 company 数据库中创建分区表 employee;
CREATE TABLE employee ( empno INT, ename VARCHAR(128), age INT, PRIMARY KEY (empno) ) ENGINE = sequoiadb COMMENT = "雇员表, sequoiadb: { table_options: { ShardingKey: { 'empno': 1 }, ShardingType: 'hash', 'Compressed': true, 'CompressionType': 'lzw', 'AutoSplit': true, 'EnsureShardingIndex': false } }";
构造数据
使用 MySQL 的存储过程,构造出测试数据用于计划分析。
构造数据
使用存储过程构造数据,生成 1000 条测试数据到 employee 表中;
DROP PROCEDURE IF EXISTS gen_data; USE company;
-- 创建存储过程
DELIMITER $$
CREATE PROCEDURE gen_data(IN num INT) BEGIN DECLARE i INT DEFAULT 0; SET i = 0; WHILE i < num DO INSERT INTO employee VALUES (i, 'Name', 21); SET i = i + 1; END WHILE; END $$ DELIMITER ;
-- 调用存储过程生成 1000 条数据
CALL gen_data(1000);
数据检查
检查存储过程构造的数据;
SELECT COUNT(1) FROM employee; SELECT * FROM employee LIMIT 10;
退出MySQL;
\q
执行计划分析
查看执行计划对于分析慢查询的优化具有重要意义。
1)登录 MySQL 实例;
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
2)查看执行计划; 通过 mysqldumpslow 只能找出慢 SQL,分析一条SQL为什么执行慢需要查看它的执行计划。在 MySQL 中,可以通过 explain 命令查看一条sql的执行计划。如查看刚才使用 mysqldumpslow 找到的慢 SQL 的执行计划;
USE company; EXPLAIN SELECT * FROM employee WHERE age = 20;
注意:
如图可通过 EXPALIN 分析 SQL 的执行计划, 看到此到 SQL 没有走索引。
创建索引
3)观察索引对执行计划的影响,为数据表 employee 的 age 查询字段创建索引;
CREATE INDEX age_Index ON employee(age);
操作截图: 图片描述
再次执行计划分析
4)在创建好索引的表上再次进行执行计划分析;
EXPLAIN SELECT * FROM employee WHERE age = 20;
操作截图:
总结
本课程讲解了如何配置和分析慢查询日志找出查询耗时长的 SQL ,同时展示有无索引的情况对执行计划的影响。
7. 考试
考试介绍
此考试是在安装部署 SequoiaDB 巨杉数据库和安装 MySQL 实例组件的环境中创建 MySQL 实例、创建数据库和数据表、事务管理、数据迁移和备份、索引创建等操作。
MySQL 是一款开源的关系型数据库管理系统,也是目前最流行的关系型数据库管理系统之一,支持标准的 SQL 语言。 SequoiaDB 支持创建 MySQL 实例,完全兼容 MySQL 语法和协议,用户可以使用 SQL 语句访问 SequoiaDB 数据库,完成对数据的增、删、查、改操作以及其他MySQL语法操作。
Note:
考试内容需在系统用户 sdbadmin 下完成,用户密码为 sdbadmin
SequoiaDB 巨杉数据库安装目录(/opt/sequoiadb)
SequoiSQL-MySQL 安装目录(/opt/sequoiasql/mysql)
###知识点
1)创建 MySQL 实例
2)创建数据库和数据表
3)创建索引
4)MySQL 事务的提交和回滚
5)MySQL 数据的导入和导出
6)MySQL 的数据备份
考试内容
1)切换到 sdbadmin 用户;
2)创建 MySQL 实例 myinst 并创建 company 数据库以及 employee 数据表( id INT, name VARCHAR(128), age INT );
3)在 employee 数据表创建普通索引 name_Index,字段为 name ;
4)查看 SequoiaDB 是否有 name_Index 这个索引;
5)在 employee 插入信息(id: 10001, name: 'Georgi', age: 48);
6)开始 MySQL 事务,插入数据(id: 10002, name: 'Bezalel', age: 21),然后查询 employee 表信息,最后提交事务;
7)开始 MySQL 事务,插入数据(id: 10003, name: 'lazhu', age: 22),然后查询 employee 表信息,不提交然后回滚事务,在进行表信息查询;
8)修改实例下的配置文件(database/3306/auto.cnf),加入导入导出路径参数配置(secure_file_priv);
9)导出 employee 表数据至 /opt/sequoiasql/tmp/employee_export.csv下;
10)新建 employee_import_test 表( id INT, name VARCHAR(128), age INT )并将刚刚导出的数据进行导入到 employee_import_test 表;
11)对 employee 表进行备份,备份路径为 /opt/sequoiasql/tmp/employee.sql;
12)清空 employee 表数据并执行备份恢复操作;
考试要求
1)正确使用数据库实例和索引
2)正确执行事务的提交和回滚操作
3)正确对表数据信息执行导入导出操作
4)准备备份数据库信息