Rao's Blog

  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

Percona Toolkit · 慢日志分析工具 pt-query-digest

发表于 2019-10-19 | 更新于 2019-10-22 | 分类于 Percona Toolkit

功能

提供慢日志分析功能,与 mysqldumpshow 工具相比,pt-query-digest 工具的分析结果更具体,更完善。

分析

第一部分:总体统计结果

  • Overall:总共有多少条查询
  • Time range:查询执行的时间范围
  • unique:唯一查询数量,即对查询条件进行参数化以后,总共有多少个不同的查询
  • total:总计
  • min:最小
  • max:最大
  • avg:平均
  • 95%:把所有值从小到大排列,位置位于 95% 的那个数,这个数一般最具有参考价值
  • median:中位数,把所有值从小到大排列,位置位于中间那个数
1
2
3
4
5
6
7
8
9
10
11
12
13
# 8.7s user time, 170ms system time, 47.34M rss, 241.90M vsz
# Current date: Wed Oct 16 16:25:30 2019
# Hostname: console
# Files: slow.log
# Overall: 7.99k total, 894 unique, 0.00 QPS, 0.02x concurrency __________
# Time range: 2018-12-21T14:35:34 to 2019-10-16T07:09:56
# Attribute total min max avg 95% stddev median
# ============ ======= ======= ======= ======= ======= ======= =======
# Exec time 529092s 5s 6210s 66s 234s 211s 14s
# Lock time 808s 0 163s 101ms 5ms 3s 761us
# Rows sent 152.93M 0 15.14M 19.60k 1.39k 284.79k 0.99
# Rows examine 188.85G 0 867.98M 24.20M 72.18M 44.34M 3.68M
# Query size 31.32M 6 66.00k 4.01k 18.47k 5.60k 793.42

第二部分:查询分组统计结果

  • Rank:所有语句的排名,默认按【time】降序排列,通过 --order-by 指定
  • Query ID:语句 ID
  • Response:总的响应时间,单位为 S
  • Time:该查询在本次分析中总的时间占比
  • Calls:执行次数,即本次分析总共有多少条这种类型的查询语句
  • R/Call:平均每次执行的响应时间
  • Item:查询对象
1
2
3
4
5
6
7
8
9
10
11
12
13
# Profile
# Rank Query ID Response time Calls R/Call V/M
# ==== =========================== ================= ===== ========= =====
# 1 0xFFF66E9B3D962FA319C806... 211420.4504 40.0% 260 813.1556 25.32 ROLLBACK
# 2 0x73AFBACFEBF3942B3B02FB... 33680.6071 6.4% 173 194.6856 0.26 INSERT SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT UNION SELECT d_etl_odsgvs_faglflext_all tdmetl.odsgvs_faglflext_all
# 3 0xE1EA5439ED76CBFAA1C5A3... 24517.0767 4.6% 4 6129.2692 1.79 SELECT v_gvs_zgvs_bseg_edw
# 4 0xE562308914915E2720E128... 21322.3718 4.0% 1282 16.6321 8.55 SELECT tdmetl.gvs_zgvs_bseg_edw
# 5 0x0159EC63419857F0EC9D5B... 17472.3139 3.3% 71 246.0889 1.03 SELECT v_edw_data
# 6 0x2DD4B63FCE7C5DEEE14F92... 14743.4445 2.8% 159 92.7261 0.73 UPDATE SELECT d_tax_moth_data
# 7 0x9C084CB3E04D24D29E8BE9... 9081.9772 1.7% 85 106.8468 90.61 DELETE tdmetl.gvs_zgvs_bseg_edw
# 8 0xF879E6613E39CC61E92478... 7834.1462 1.5% 307 25.5184 62... SELECT v_gvs_zgvs_bseg_edw
# 9 0x2B3FA3F89D3D4498CC6FFD... 7490.2099 1.4% 35 214.0060 2.56 INSERT SELECT gvs_zgvs_bseg_edw_hz tdmetl.gvs_zgvs_bseg_edw
# 10 0x6DBDA9B50953D60A486825... 6925.0820 1.3% 71 97.5364 25... INSERT SELECT d_tax_moth_data v_d_tax_profit_data

第三部分:每一种查询的详细统计结果

  • ID:查询的 ID 号,和上图的 Query ID 对应
  • Databases:数据库名
  • Hosts:各个 Host 执行的次数占比
  • Users:查询用户
  • Query_time distribution :查询时间分布,长短体现区间占比
  • Tables:查询中涉及到的表
  • Explain:SQL 语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Query 1: 0.00 QPS, 0.05x concurrency, ID 0xFFF66E9B3D962FA319C8068B5C1997CD at byte 3105049
# This item is included in the report because it matches --limit.
# Scores: V/M = 25.32
# Time range: 2019-02-15T18:37:47 to 2019-04-03T21:18:48
# Attribute pct total min max avg 95% stddev median
# ============ === ======= ======= ======= ======= ======= ======= =======
# Count 3 260
# Exec time 39 211420s 322s 1078s 813s 1013s 143s 793s
# Lock time 0 0 0 0 0 0 0 0
# Rows sent 0 0 0 0 0 0 0 0
# Rows examine 0 0 0 0 0 0 0 0
# Query size 0 2.03k 8 8 8 8 0 8
# String:
# Databases tdmetl
# Hosts 10.138.225.51 (140/53%), 10.138.225.43 (69/26%)... 3 more
# Users tdmsetldev
# Query_time distribution
# 1us
# 10us
# 100us
# 1ms
# 10ms
# 100ms
# 1s
# 10s+ ################################################################
rollback\G

使用

1
2
3
4
5
6
7
8
# 分析全量慢查询日志
$ pt-query-digest slow.log > slow_report.log

# 分析最近12个小时内的查询
$ pt-query-digest --since=12h slow.log > slow_report.log

# 分析最近1个月内的查询
$ pt-query-digest slow.log --since '2019-06-08 10:00:00' --until '2019-07-08 10:00:00' > slow_report.log

Percona Toolkit · 在线修改表结构工具 pt-online-schema-change

发表于 2019-10-19 | 更新于 2019-10-22 | 分类于 Percona Toolkit

功能

支持不锁表在线修改表结构

原理

以 test.employees 为例:

  • 创建新表,test.employees_new 表结构与 test.employees 一致
  • test.employees_new 执行 SQL
  • test.employees 添加触发器 (DELETE/UPDATE/INSERT)
  • 批量从 test.employees 拷贝数据到 test.employees_new,拷贝过程中通过触发器自动更新
  • 修改表名,test.employees 修改为 test.employees_old,test.employees_new 修改为 test.employees
  • 删除 test.employees_old 和触发器

使用

参数说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--host=xxx 
--user=xxx
--password=xxx # 连接实例信息
--user= # 连接mysql的用户名
--password= # 连接mysql的密码
--host= # 连接mysql的地址
P=3306 # 连接mysql的端口号
D= # 连接mysql的库名
t= # 连接mysql的表名
--alter # 修改表结构的语句
--dry-run # 创建和修改新表
--print # 打印信息
--execute # 执行修改表结构 ,--dry-run与--execute必须指定一个,二者相互排斥
--charset=utf8 # 使用utf8编码,避免中文乱码
--no-version-check # 不检查版本,在阿里云服务器中一般加入此参数,否则会报错

添加索引

1
$ pt-online-schema-change --user=root --password='xx' --socket=/data/mysql-tdds/mysql.sock --alter "ADD INDEX idx_address(address)" D=test,t=employees --print --execute

删除索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$ pt-online-schema-change --user=root --password='xx' --socket=/data/mysql-tdds/mysql.sock --alter "DROP INDEX idx_address" D=test,t=employees --print --execute

Operation, tries, wait:
analyze_table, 10, 1
copy_rows, 10, 0.25
create_triggers, 10, 1
drop_triggers, 10, 1
swap_tables, 10, 1
update_foreign_keys, 10, 1
Altering `test`.`employees`...
Creating new table...
CREATE TABLE `test`.`_employees_new` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL DEFAULT '',
`address` varchar(50) DEFAULT NULL,
`age` tinyint(3) unsigned NOT NULL DEFAULT '0',
`gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_address` (`address`)
) /*!50100 TABLESPACE `innodb_file_per_table` */ ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8
Created new table test._employees_new OK.
Altering new table...
ALTER TABLE `test`.`_employees_new` DROP INDEX idx_address
Altered `test`.`_employees_new` OK.
2019-10-22T15:59:32 Creating triggers...
2019-10-22T15:59:32 Created triggers OK.
2019-10-22T15:59:32 Copying approximately 5 rows...
INSERT LOW_PRIORITY IGNORE INTO `test`.`_employees_new` (`id`, `name`, `address`, `age`, `gmt_create`, `gmt_modified`) SELECT `id`, `name`, `address`, `age`, `gmt_create`, `gmt_modified` FROM `test`.`employees` LOCK IN SHARE MODE /*pt-online-schema-change 112205 copy table*/
2019-10-22T15:59:32 Copied rows OK.
2019-10-22T15:59:32 Analyzing new table...
2019-10-22T15:59:32 Swapping tables...
RENAME TABLE `test`.`employees` TO `test`.`_employees_old`, `test`.`_employees_new` TO `test`.`employees`
2019-10-22T15:59:32 Swapped original and new tables OK.
2019-10-22T15:59:32 Dropping old table...
DROP TABLE IF EXISTS `test`.`_employees_old`
2019-10-22T15:59:32 Dropped old table `test`.`_employees_old` OK.
2019-10-22T15:59:32 Dropping triggers...
DROP TRIGGER IF EXISTS `test`.`pt_osc_test_employees_del`
DROP TRIGGER IF EXISTS `test`.`pt_osc_test_employees_upd`
DROP TRIGGER IF EXISTS `test`.`pt_osc_test_employees_ins`
2019-10-22T15:59:32 Dropped triggers OK.
Successfully altered `test`.`employees`.

Percona Toolkit · 归档工具 pt-archiver

发表于 2019-10-19 | 更新于 2019-10-22 | 分类于 Percona Toolkit

功能

将 MySQL 数据库中表的记录归档到另外一个表或者文件

原理

pt

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 把数据归档至归档表
pt-archiver --source h=10.138.228.231,P=3306,u=sre,p='xxx',D=matomo,t=matomo_log_link_visit_action --charset=utf8 --dest h=10.138.228.231,P=3306,u=sre,p='xxx',D=matomo,t=matomo_log_link_visit_action_history --where "server_time < '2019-01-01'" --limit 1000 --commit-each --bulk-insert --no-version-check

# h=10.138.228.231 -- 数据库实例地址
# P=3306 -- 数据库实例端口
# u=sre -- 数据库实例用户
# p=xxx -- 数据库实例用户密码
# D=matomo -- 数据库实例数据库
# t=matomo_log_link_visit_action -- 数据库实例表名称

# --source -- 指定要被归档的数据源
# --charset=utf8 -- 使用的字符集,需与表字符集一致
# --file -- 指定目标操作系统文件名
# --dest -- 指定归档到的目标表
# --where "id > 3008" -- 指定 where 过滤条件,过滤出要归档的数据
# --limit 1000 -- 每条语句读取和归档的数据行数,默认是 1
# --commit-each -- 每次获取和归档数据后,commit提交
# --no-version-check -- 不做版本检查
# --bulk-insert -- 批量插入数据
# --statistics -- 显示 pt-archiver 本次操作的统计信息。

# 每5000条删除1次,每隔2000行输出一次数据
pt-archiver --source D=ibilling_pay_hupu,t=purchase_order --user=root --password='root' -S /tmp/mysql.sock --where "create_datetime <= '2015-06-20 00:00:00'" --purge --limit=5000 --progress 2000 --why-quit --no-check-charset > /opt/1.log

# 用于把数据导出文件,不用删除原表中数据
pt-archiver --source h=127.0.0.1,P=58886,D=test,t=t_info_refresh --no-check-charset --where 'id > 1' --progress 4000 --no-delete --file "/tmp/pt-archiver.sql" --limit=10000

Percona Toolkit · 信息收集工具 pt-summary

发表于 2019-10-18 | 更新于 2019-11-15 | 分类于 Percona Toolkit

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
$ pt-summary
# Percona Toolkit System Summary Report ######################
Date | 2019-10-18 09:41:24 UTC (local TZ: CST +0800)
Hostname | hrmk-Dubbo4
Uptime | 182 days, 20:56, 1 user, load average: 0.66, 0.69, 0.69
System | Dell Inc.; PowerEdge R730; vNot Specified (Rack Mount Chassis)
Service Tag | 5K6GBD2
Platform | Linux
Release | CentOS release 6.10 (Final)
Kernel | 2.6.32-431.el6.x86_64
Architecture | CPU = 64-bit, OS = 64-bit
Threading | NPTL 2.12
SELinux | Enforcing
Virtualized | No virtualization detected

# Processor ##################################################
Processors | physical = 2, cores = 12, virtual = 24, hyperthreading = yes
Speeds | 24x2400.128
Models | 24xIntel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz
Caches | 24x15360 KB

# Memory #####################################################
Total | 15.6G
Free | 217.5M
Used | physical = 15.4G, swap allocated = 7.8G, swap used = 96.0k, virtual = 15.4G
Shared | 1.2M
Buffers | 221.9M
Caches | 2.2G
Dirty | 344 kB
UsedRSS | 12.4G
Swappiness | 60
DirtyPolicy | 20, 10
DirtyStatus | 0, 0

# Network Devices ############################################
Device Speed Duplex
========= ========= =========
em2 1000Mb/s Full
em3 Unknown! Unknown!
em4 1000Mb/s Full
bond0 1000Mb/s Full
virbr0-nic 10Mb/s Full
virbr0
em1 1000Mb/s Full

Percona Toolkit 系列

发表于 2019-10-18 | 更新于 2019-10-24 | 分类于 Percona Toolkit

一、安装

Percona Toolkit · 简介安装

二、工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
.
├── pt-align
├── pt-archiver
├── pt-config-diff
├── pt-deadlock-logger
├── pt-diskstats
├── pt-duplicate-key-checker
├── pt-fifo-split
├── pt-find
├── pt-fingerprint
├── pt-fk-error-logger
├── pt-heartbeat
├── pt-index-usage
├── pt-ioprofile
├── pt-kill
├── pt-mext
├── pt-mongodb-query-digest
├── pt-mongodb-summary
├── pt-mysql-summary
├── pt-online-schema-change
├── pt-pmp
├── pt-query-digest
├── pt-secure-collect
├── pt-show-grants
├── pt-sift
├── pt-slave-delay
├── pt-slave-find
├── pt-slave-restart
├── pt-stalk
├── pt-summary
├── pt-table-checksum
├── pt-table-sync
├── pt-table-usage
├── pt-upgrade
├── pt-variable-advisor
└── pt-visual-explain

三、使用

  • Percona Toolkit · 格式化输出工具 pt-align
  • Percona Toolkit · 归档工具 pt-archiver
  • Percona Toolkit · 信息收集工具 pt-summary
  • Percona Toolkit · 配置对比工具 pt-config-diff
  • Percona Toolkit · 死锁监控工具 pt-deadlock-logger
  • Percona Toolkit · 磁盘分析工具 pt-diskstats
  • Percona Toolkit · 冗余索引检测工具 pt-duplicate-key-checker
  • Percona Toolkit · 索引分析工具 pt-index-usage
  • Percona Toolkit · 在线修改表结构工具 pt-online-schema-change
  • Percona Toolkit · 慢日志分析工具 pt-query-digest
  • Percona Toolkit · 用户权限显示工具 pt-show-grants
  • Percona Toolkit · Slave 异常修复工具 pt-slave-restart

CentOS 配置阿里 Yum 源

发表于 2019-10-18 | 更新于 2019-10-24 | 分类于 其他

备份当前 Yum 源

1
$ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

下载阿里 Yum 源

1
2
3
4
5
# CentOS 6
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

# CentOS 7
$ wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

清理

1
$ yum clean all

更新缓存

1
$ yum makecache

Markdown 编写规范

发表于 2019-10-18 | 更新于 2019-11-15 | 分类于 其他

说明

团队统一遵循约定的 Markdown 编写规范,目的是提高文档的可读性,降低团队成员之间的沟通成本。

规则

通用

  • 后缀必须使用 .md
  • 文件名必须使用小写,多个单词之间使用 - 分隔
  • 文件编码必须用 UTF-8
  • 章节标题必须以 ## 开始,而不是 #
  • 章节标题和内容间必须有一个空行

空格

  • 中文与英文、数字及 @ # $ % ^ & * . ( ) 等符号之间需要加空格
  • 数字与单位之间需要加空格
  • 链接前后需要加空格
  • 中文标点与前后字符之间不需要加空格
  • ° / % 与数字之间不需要增加空格

中文符号

  • 如果括号内有中文,则使用中文括号
  • 如果括号中的内容全部都是英文,则使用半角英文括号
  • 简体中文使用直角引号(「」)代替双引号(“”)
  • 省略号使用「……」,而「。。。」仅用于表示停顿
  • 专有名词使用正确的大小写,如 GitHub

MySQL · 数据归档

发表于 2019-10-17 | 更新于 2019-11-15 | 分类于 MySQL

背景

大表 base_barcode_info 数据量 5000w+,遇到很大的性能瓶颈,需要将表中的历史数据进行归档。

实践

  1. 安装 Percona Toolkit

  2. 创建归档表 base_barcode_info_history_20190801

  3. 使用 crontab 执行定时任务,archiver.sh 脚本

1
2
3
4
5
# 后台执行任务
nohup sh archiver.sh > myout.file 2>&1 &

# archiver.sh
pt-archiver --source h=10.138.232.85,P=3306,u=sre,p='xx',D='csomo-barcode',t=base_barcode_info --charset=utf8 --dest h=10.138.232.85,P=3306,u=sre,p='xx',D='csomo-barcode',t=base_barcode_info_history_20190801 --where "barcode_request_id IN (SELECT id FROM base_barcode_request WHERE TYPE = '5' AND est < '2019-08-01 00:00:00')" --limit 1000 --commit-each --bulk-insert --no-version-check
  1. 查看归档进度
1
2
3
mysql> use information_schema;
mysql> select table_name,table_rows from tables where TABLE_SCHEMA = 'csomo-barcode' and table_name='base_barcode_info_history_20190801';
mysql> select table_name,table_rows from tables where TABLE_SCHEMA = 'csomo-barcode' and table_name='base_barcode_info';
  1. 归档 46598706 花费约 16 小时
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# Fri Sep 13 08:19:34 CST 2019
+------------------------------------+------------+
| table_name | table_rows |
+------------------------------------+------------+
| base_barcode_info_history_20190801 | 0 |
+------------------------------------+------------+

# Fri Sep 13 12:29:07 CST 2019
+------------------------------------+------------+
| table_name | table_rows |
+------------------------------------+------------+
| base_barcode_info_history_20190801 | 13462385 |
+------------------------------------+------------+

# Fri Sep 13 17:29:47 CST 2019
+------------------------------------+------------+
| table_name | table_rows |
+------------------------------------+------------+
| base_barcode_info_history_20190801 | 26300649 |
+------------------------------------+------------+

# Fri Sep 13 22:21:25 CST 2019
+------------------------------------+------------+
| table_name | table_rows |
+------------------------------------+------------+
| base_barcode_info_history_20190801 | 36529410 |
+------------------------------------+------------+

# ?
+------------------------------------+------------+
| table_name | table_rows |
+------------------------------------+------------+
| base_barcode_info_history_20190801 | 46598706 |
+------------------------------------+------------+

创客专项提升课

发表于 2019-10-13 | 更新于 2019-10-22 | 分类于 其他

课程一:沟通影响技术

背景:在日常工作中,难免碰到冲突、误解、矛盾,你是否遇到以下沟通问题的误区:

  • 权利至上论:谁权力大、谁就说的算,不行就让领导出面吧。
  • 利益至上论:大家各有各的利益,说了也没用,多说反而有害。
  • 道理为王论:流程规定该由谁负责就是谁负责。

为帮助走出沟通误区,提升合作效率,巩固合作关系,看清对方“被影响”的本质,掌握“影响”他人的原则和方法,成为优秀的影响者,有能力驾驭“挑战的”沟通。

时间:2019年9月5日 09:00~17:00

地点:海尔大学 B201

老师:王辰阳

学习收获:

① 自我介绍时,是拉近人与人距离最重要时机,期望达到的目标是“让人不讨厌”,王老师在介绍自己的时候,我觉得达到了这种目的,值得参考,他写了三个关键字:

  • 北(工)大,5年
  • 西门子,10年
  • 竞越,15年

用幽默、戏谑的语气介绍自己,并着重说明这 3 个关键词之间的关系,简明扼要地完成自我介绍。

② 咨询别人意见态度时,将第一人称改为第三人称

1
2
示例:你爱我吗?你觉得我怎么样?
修改为:你觉得赵薇怎么样?你觉得他有什么优缺点?

课程二:业务面试官培训

培训时间:2019年8月20日 14:00-17:00

地点:创牌一楼会议室 A09

培训内容:

  • 招聘面试基本含义:测评及面试的基本概念和历史,面试的基本态度及仪表要求,面试中常见的误差,面试对于企业的公关价值及意义。
  • 面谈的操作方法及技巧:BEI(行为事件访谈)需要注意的事项,如何识别虚假的 BEI(谎言识别)及事件访谈技巧。BEI 行为事件面试法最核心的概念即 “人过去表现出来的行为方式是人未来行为最可靠的预测指标”,从招聘“最优秀的人”转变落地为招聘“最适合的人”。
  • 面试的方法和技巧:不同情景下的常见面试方法概览(校园招聘& 社会招聘 & 内部竞聘 ),结构化面试的概念及六种问题类型,如何追问和识别虚假回答。
  • 基于岗位胜任力模型的面试评价:胜任特征的概念及由来,岗位胜任力模型与人才甄选的关系,面试选拔的依据和标准,常见的维度及行为观测点。
  • 如何阅读简历并进行有效提问:从简历中寻找与面试相关的几类信息,依靠简历面试的步骤,标准化面试招聘流程建议,面试的评分要点及技巧重申。

学习收获:

① 你最近读什么书?是一个好问题的切入点,通过书展开了解知识广度和深度。

② 在确认某件事情的真实性时,可以提问 “请举一个例子?”

MySQL · 测试数据集

发表于 2019-10-13 | 更新于 2019-12-06 | 分类于 MySQL

简介

介绍 | 数据集

安装

下载

1
2
$ git clone https://github.com/datacharmer/test_db.git
$ cd test_db

存储:编辑 employees.sql

1
2
3
4
5
   set storage_engine = InnoDB;
-- set storage_engine = MyISAM;
-- set storage_engine = Falcon;
-- set storage_engine = PBXT;
-- set storage_engine = Maria;

导入

1
$ mysql -t -u'xx' -p'xx' < employees.sql

数据结构

1…121314…18
Hui Rao

Hui Rao

最好的成长是分享
173 日志
19 分类
14 标签
GitHub E-Mail
© 2021 Hui Rao
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v7.1.0
|