如何在Windows下编译或调试MySQL用vs code 就可以了 。
Visual Studio Code
Visual Studio Code(简称VS Code)是由微软开发的 , 同时支持Windows、Linux和macOS操作系统的开源文本编辑器 。它支持调试,内置了Git 版本控制功能,同时也具有开发环境功能,例如代码补全(类似于IntelliSense)、代码片段、代码重构等 。该编辑器支持用户自定义配置,例如改变主题颜色、键盘快捷方式、编辑器属性和其他参数,还支持扩展程序并在编辑器中内置了扩展程序管理的功能 。
安装LLDB
LLDB是LLVM编译器的一部分 , 推荐使用Homebrew安装LLVM工具集,不建议使用系统自带的LLDB,安装前必须先创建证书否则无法安装,步骤如下:
创建完成后,开始安装LLVM
brew install llvm --with-python@2 --with-lldb
安装插件
VS Code自带有debug功能,这里我推荐使用LLDB Debugger插件 。
?接下来,为项目配置调试参数 。
配置调试参数
使用VS Code打开MySQL源码目录 , 在侧边栏选择debug栏目,添加配置,program输入需要调试的程序路径,这里选择你编译好的mysqld路径,args输入程序启动所需的参数,通常会指定mysqld的配置文件 。这样就配置好了 , 是不是很简单 。
启动调试
点击启动按钮,启动后如果没有设置断点会mysqld会正常启动,如果触发了断点会如下图显示 。
整个调试窗口基本分为六部分,所有的调试操作都在这里完成:
1: 显示变量信息
2: 设置重点关注的变量
3: 显示调用栈信息
4: 设置断点信息,在代码行号前也可以设置断点
5: 代码显示区域 , 上方是调试按钮,包括 continue/stepover/step in/step out/restart/stop
6: 调试终端输入输出区
断点设置
在代码行号前点击即可在该行为设置断点,也可以根据条件设置断点 。以设置ConditionalBreakpoint为例,当程序启动后会按照你设置的条件表达式判断是否触发断点 。
Conditional Breakpoint这种方式用在目标变量达到某条件时触发断点 , 其余则跳过继续执行 。比如:设置变量等于目标表名时触发断点,其余表则跳过 , 相对函数名断点省去很多手工跳过操作 。
远程调试
假如你想调试远程Linux服务器上的MySQL上面的方法就不合适了,这时需要远程调试 。lldb和gdb都支持远程调试,这里以lldb为例 。
需要先在远程主机上安装lldb,使用yum安装,源地址在这里
remote$ yum install -y llvm-toolset-7
安装完成后,启动lldb-server
remote$ /opt/rh/llvm-toolset-7/root/usr/bin/lldb-serverplatform --listen "*:9191" --server
接下来,在VS Code调试界面中新增配置项 。
{
"type": "lldb",
"request": "attach",
"name": "Remote attach",
"program": "~/mysql5626/usr/local/mysql/bin/mysqld",
"pid":"target_pid",
"initCommands": [
"platform select remote-linux",
"platform connect connect://remote_host:9191"
],
"sourceMap": {
"/export/home/pb2/build/sb_0-15908961-1436910670.17/mysql-5.6.26": "/Users/hongbin/workbench/mysql-server"
}
},
program: 本机也要拷贝一份目标程序,加载
pid: 填写远程主机的mysqld进程id
sourceMap: 填写mysqld编译的代码路径与本机代码库路径的映射,这样调试时代码才可以和程序关联在一起看
【怎么更改mysql主题 mysql怎么修改默认值】注意:记得调试前将代码切换到与目标程序版本一致的branch
mysql 更改表结构Online DDL 工具怎么更改mysql主题:pt-osc
对于 MySQL Online DDL 目前主流怎么更改mysql主题的有三种工具:
原生 Online DDL;
pt-osc(online-schema-change)怎么更改mysql主题 ,
gh-ost
本文主要讲解 pt-online-schema-change 的使用以及三种工具的简单对比 。
一、原理及限制
1.1 原理
1. 创建一个与原表结构相同的空表怎么更改mysql主题,表名是 _new 后缀;
2. 修改步骤 1 创建的空表的表结构;
3. 在原表上加三个触发器:delete/update/insert,用于 copy 数据过程中,将原表中要执行的语句在新表中执行;
4. 将原表数据以数据块(chunk)的形式 copy 到新表;
5. rename 原表为 old 表,并把新表 rename 为原表名,然后删除旧表;
6. 删除触发器 。
MySQL 数据库,如何分角色权限建表?角色一直存在各个数据库中,比如 SQL Server、Oracle 等,MySQL 自从版本 8.0 release,引入了角色这个概念 。
角色的概念
角色就是一组针对各种数据库权限的集合 。比如,把一个角色分配给一个用户,那这个用户就拥有了这个角色包含的所有权限 。一个角色可以分配给多个用户,另外一个用户也可以拥有多个角色,两者是多对多的关系 。不过 MySQL 角色目前还没有提供类似于其他数据库的系统预分配的角色 。比如某些数据库的 db_owner、 db_datareader 、 db_datawriter 等等 。那接下来我分几个方面,来示例说明角色的使用以及相关注意事项 。
示例 1:一个完整角色的授予步骤
用管理员创建三个角色:db_owner, db_datareader, db_datawriter
mysql create role db_owner,db_datareader,db_datawriter;
Query OK, 0 rows affected (0.02 sec)
mysql grant all on ytt_new.* to db_owner;
Query OK, 0 rows affected (0.01 sec)
mysql grant select on ytt_new.* to db_datareader;
Query OK, 0 rows affected (0.01 sec)
mysql grant insert,delete,update on ytt_new.* to db_datawriter;
Query OK, 0 rows affected (0.01 sec)
创建三个普通用户,分别为 ytt1、ytt2、ytt3 。mysql create user ytt1 identified by 'ytt',ytt2 identified by 'ytt',ytt3 identified by 'ytt';Query OK, 0 rows affected (0.01 sec)
分别授予这三个用户对应的角色 。
-- 授权角色
mysql grant db_owner to ytt1;
Query OK, 0 rows affected (0.02 sec)
-- 激活角色
mysql set default role db_owner to ytt1;
Query OK, 0 rows affected (0.00 sec)
mysql grant db_datareader to ytt2;
Query OK, 0 rows affected (0.01 sec)
mysql set default role db_datareader to ytt2;
Query OK, 0 rows affected (0.01 sec)
mysql grant db_datawriter to ytt3;
Query OK, 0 rows affected (0.01 sec)
mysql set default role db_datawriter to ytt3;
Query OK, 0 rows affected (0.01 sec)
以上是角色授予的一套完整步骤 。那上面有点非常规的地方是激活角色这个步骤 。MySQL 角色在创建之初默认是没有激活的,也就是说创建角色 , 并且给一个用户特定的角色,这个用户其实并不能直接使用这个角色,除非激活了才可以 。
示例 2:一个用户可以拥有多个角色
-- 用管理员登录并且创建用户
mysql create user ytt4 identified by 'ytt';
Query OK, 0 rows affected (0.00 sec)
-- 把之前的三个角色都分配给用户ytt4.
mysql grant db_owner,db_datareader,db_datawriter to ytt4;
Query OK, 0 rows affected (0.01 sec)
-- 激活用户ytt4的所有角色.
mysql set default role all to ytt4;
Query OK, 0 rows affected (0.02 sec)
-- ytt4 用户登录
root@ytt-pc:/var/lib/mysql# mysql -uytt4 -pytt -P3304 -hytt-pc
...
-- 查看当前角色列表
mysql select current_role();
--------------------------------------------------------
| current_role()|
--------------------------------------------------------
| `db_datareader`@`%`,`db_datawriter`@`%`,`db_owner`@`%` |
--------------------------------------------------------
1 row in set (0.00 sec)
-- 简单创建一张表并且插入记录 , 检索记录,完了删掉这张表
mysql use ytt_new
Database changed
mysql create table t11(id int);
Query OK, 0 rows affected (0.05 sec)
mysql insert into t11 values (1);
Query OK, 1 row affected (0.02 sec)
mysql select * from t11;
------
| id|
------
|1 |
------
1 row in set (0.00 sec)
mysql drop table t11;
Query OK, 0 rows affected (0.04 sec)
示例 3:用户在当前 session 里角色互换
其实意思是说,用户连接到 MySQL 服务器后,可以切换当前的角色列表 , 比如由 db_owner 切换到 db_datareader 。
-- 还是之前的用户ytt4, 切换到db_datareader
mysql set role db_datareader;
Query OK, 0 rows affected (0.00 sec)
mysql select current_role();
---------------------
| current_role()|
---------------------
| `db_datareader`@`%` |
---------------------
1 row in set (0.00 sec)
-- 切换后,没有权限创建表
mysql create table t11(id int);
ERROR 1142 (42000): CREATE command denied to user 'ytt4'@'ytt-pc' for table 't11'
-- 切换到 db_owner , 恢复所有权限 。
mysql set role db_owner;
Query OK, 0 rows affected (0.00 sec)
mysql create table t11(id int);
Query OK, 0 rows affected (0.04 sec)
示例 4:关于角色的两个参数
activate_all_roles_on_login:是否在连接 MySQL 服务时自动激活角色mandatory_roles:强制所有用户默认角色
-- 用管理员连接MySQL,
-- 设置默认激活角色
mysql set global activate_all_roles_on_login=on;
Query OK, 0 rows affected (0.00 sec)
-- 设置强制给所有用户赋予角色db_datareader
mysql set global mandatory_roles='db_datareader';
Query OK, 0 rows affected (0.00 sec)
-- 创建用户ytt7.
mysql create user ytt7;
Query OK, 0 rows affected (0.01 sec)
-- 用 ytt7登录数据库
root@ytt-pc:/var/lib/mysql# mysql -uytt7 -P3304 -hytt-pc
...
mysql show grants;
-------------------------------------------
| Grants for ytt7@%|
-------------------------------------------
| GRANT USAGE ON *.* TO `ytt7`@`%`|
| GRANT SELECT ON `ytt_new`.* TO `ytt7`@`%` |
| GRANT `db_datareader`@`%` TO `ytt7`@`%`|
-------------------------------------------
3 rows in set (0.00 sec)
示例 5 :create role 和 create user 都有创建角色权限,两者有啥区别?
以下分别创建两个用户 ytt8、ytt9 , 一个给 create role,一个给 create user 权限 。
-- 管理员登录 , 创建用户ytt8,ytt9.
mysql create user ytt8,ytt9;
Query OK, 0 rows affected (0.01 sec)
mysql grant create role on *.* to ytt8;
Query OK, 0 rows affected (0.02 sec)
mysql grant create user on *.* to ytt9;
Query OK, 0 rows affected (0.01 sec)
-- 用ytt8 登录,
root@ytt-pc:/var/lib/mysql# mysql -uytt8 -P3304 -hytt-pc
...
mysql create role db_test;
Query OK, 0 rows affected (0.02 sec)
-- 可以创建角色,但是不能创建用户
mysql create user ytt10;
ERROR 1227 (42000): Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation
mysql \q
Bye
-- 用ytt9 登录
root@ytt-pc:/var/lib/mysql# mysql -uytt9 -P3304 -hytt-pc
...
-- 角色和用户都能创建
mysql create role db_test2;
Query OK, 0 rows affected (0.02 sec)
mysql create user ytt10;
Query OK, 0 rows affected (0.01 sec)
mysql \q
Bye
那这里其实看到 create user 包含了 create role , create user 即可以创建用户,也可以创建角色 。
示例 6:MySQL 用户也可以当角色来用
-- 用管理员登录,创建用户ytt11,ytt12.
mysql create user ytt11,ytt12;
Query OK, 0 rows affected (0.01 sec)
mysql grant select on ytt_new.* to ytt11;
Query OK, 0 rows affected (0.01 sec)
-- 把ytt11普通用户的权限授予给ytt12
mysql grant ytt11 to ytt12;
Query OK, 0 rows affected (0.01 sec)
-- 来查看 ytt12的权限,可以看到拥有了ytt11的权限
mysql show grants for ytt12;
-----------------------------------
| Grants for ytt12@%|
-----------------------------------
| GRANT USAGE ON *.* TO `ytt12`@`%` |
| GRANT `ytt11`@`%` TO `ytt12`@`%`|
-----------------------------------
2 rows in set (0.00 sec)
-- 在细化点,看看ytt12拥有哪些具体的权限
mysql show grants for ytt12 using ytt11;
--------------------------------------------
| Grants for ytt12@%|
--------------------------------------------
| GRANT USAGE ON *.* TO `ytt12`@`%`|
| GRANT SELECT ON `ytt_new`.* TO `ytt12`@`%` |
| GRANT `ytt11`@`%` TO `ytt12`@`%`|
--------------------------------------------
3 rows in set (0.00 sec)
示例 7:角色的撤销
角色撤销和之前权限撤销类似 。要么 revoke,要么删除角色,那这个角色会从所有拥有它的用户上移除 。
-- 用管理员登录 , 移除ytt2的角色
mysql revoke db_datareader from ytt2;
Query OK, 0 rows affected (0.01 sec)
-- 删除所有角色
mysql drop role db_owner,db_datareader,db_datawriter;
Query OK, 0 rows affected (0.01 sec)
-- 对应的角色也从ytt1上移除掉了
mysql show grants for ytt1;
----------------------------------
| Grants for ytt1@%|
----------------------------------
| GRANT USAGE ON *.* TO `ytt1`@`%` |
----------------------------------
1 row in set (0.00 sec)
至此,我分了 7 个目录说明了角色在各个方面的使用以及注意事项,希望对大家有帮助 。
怎么更改mysql主题的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于mysql怎么修改默认值、怎么更改mysql主题的信息别忘了在本站进行查找喔 。
推荐阅读
- redis水平扩展垂直扩展,redis 数据倾斜
- 如何构建营销故事分析,如何构建营销故事分析案例
- 乌班图系统上的虚拟机,乌班图在虚拟机中怎么用
- 飞行游戏1942,飞行游戏大全飞行游戏推荐
- vb.net文本查找 vb查找文件
- 平台如何推广运营模式,搭建平台推广运营
- mysql 命令行 mysql命令行输错了怎么办
- 做短视频应该提倡什么的简单介绍
- mysql集群负载均衡策略是什么 mysql集群负载均衡策略