Mysql常用sql脚本与配置管理(密码忘记,角色管理,分表,连接数,高并发,索引,级联查询)
来源:SegmentFault
时间:2023-01-19 09:58:02 173浏览 收藏
对于一个数据库开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《Mysql常用sql脚本与配置管理(密码忘记,角色管理,分表,连接数,高并发,索引,级联查询)》,主要介绍了MySQL,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!
本文参考自配置啦:Mysql的配置与日常维护sql
应用场景
Mysql的使用过程,经常遇到慢查询分析,性能排查,安全设置,分表设置等.
基础资源
Mysql 5.6
使用须知
注意数据库端口,账号,以及ip白名单等安全设置。 另外注意建立备份机制,将风险降到最低。
配置步骤
mysql数据库的创建.
[场景1] 从零开始: 基于mysql管理工具进行创建.
[场景2] 从现有数据库开始:从其它地方拷贝了数据库目录,只需创建服务。
"安装目录binmysqld.exe" --defaults-file="数据库目录my.ini" MySQL_UserInfo_Service //最后那个是windows服务名称
mysql账号管理与授权管理(设置完成之后,需要重启mysql服务).
root账户登录.
use mysql;
select * from user;
创建用户
CREATE USER ‘validate‘@‘%‘ IDENTIFIED BY ‘db_user1‘;
更改密码
命令:SET PASSWORD FOR ‘username‘@‘host‘ = PASSWORD(‘newpassword‘);如果是当前登陆用户用SET PASSWORD = PASSWORD("newpassword");
例子: SET PASSWORD FOR ‘db_user1‘@‘%‘ = PASSWORD("123456")
授权
命令:GRANT privileges ON databasename.tablename TO ‘db_user1‘@‘host‘
说明: privileges - 用户的操作权限,如SELECT , INSERT , UPDATE 等(详细列表见该文最后面).如果要授予所的权限则使用ALL.;databasename - 数据库名,tablename-表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示, 如.*.
例子: GRANT SELECT, INSERT ON test.user TO ‘pig‘@‘%‘;
GRANT ALL ON . TO ‘db_user1‘@‘%‘;
示例1:grant select,insert,update,delete,create,drop on test.hr to db_user1@192.168.10.1 identified by ‘123‘;
示例2:grant all privileges on test.* to db_user1@192.168.10.1 identified by ‘123‘;
flush privileges;
注意:用以上命令授权的用户不能给其它用户授权,如果想让该用户可以授权,用以下命令:
GRANT privileges ON databasename.tablename TO ‘db_user1‘@‘host‘ WITH GRANT OPTION;‘; 查看.
撤销授权
命令: REVOKE privilege ON databasename.tablename FROM ‘db_user1‘@‘host‘;
说明: privilege, databasename, tablename - 同授权部分.
例子: REVOKE SELECT ON . FROM ‘db_user1‘@‘%‘;
注意: 假如你在给用户‘db_user1‘@‘%‘授权的时候是这样的(或类似的):GRANT SELECT ON test.user TO ‘db_user1‘@‘%‘, 则在使用REVOKE SELECT ON . FROM ‘db_user1‘@‘%‘;命令并不能撤销该用户对test数据库中user表的SELECT 操作.相反,如果授权使用的是GRANT SELECT ON . TO ‘pig‘@‘%‘;则REVOKE SELECT ON test.user FROM ‘pig‘@‘%‘;命令也不能撤销该用户对test数据库中user表的Select 权限.
具体信息可以用命令SHOW GRANTS FOR ‘db_user1‘@‘%‘; 查看.
删除用户
命令: DROP USER ‘username‘@‘host‘;
查看mysql的data目录.
show variables like ‘datadir‘;
查看数据的创建脚本.
SHOW CREATE DATABASE Db_UserProfile
检查数据表是否存在.
SELECT table_name FROM information_schema.TABLES WHERE table_name =‘table_398‘;
检查数据表的所有列的定义.
show full columns from userprofile.table_325
修改表名.
ALTER TABLE tb_apiaccount2 RENAME TO tb_apiaccount
忘记密码.
mysql.ini中mysqlld中添加skip-grant-tables跳过权限验证是被注释掉的,去掉注释,重新启动mysql服务.
select * from user;
update user set
PASSWORD=PASSWORD(‘pwd123456‘) where
Host=‘localhost‘; #设置密码为pwd123456
mysql中group_concat(字段名)的返回值被截取导致批量操作失败的问题.
在mysql中的my.ini配置文件中,增加:group_concat_max_len=20480的值,默认是1024,可以根据需求变大.
mysql不支持function.
- mysql> set global log_bin_trust_function_creators = 1;
- 系统启动时 --log-bin-trust-function-creators=1
- 在my.ini(linux下为my.conf)文件中 [mysqld] 标记后加一行内容为 log-bin-trust-function-creators=1
注:设置完成需要重启服务.
mysql分表.
1.)子表必须是MYISAM引擎.//查询 show table status
2.)总表必须是Merge引擎..
3.)总表和子表的结构必须相同..
[注]2017-8-21发现阿里云的rds是不支持MyIsam引擎,因此总表无法正常使用.虽然本地没有问题.//https://bbs.aliyun.com/read/2...
存储过程的常用问题快速排查.
1.插入和更新的字段值不能为null.
2.不能出现未定义的变量.
3.多个列名之间的逗号需要时英文的..
4.插入数据中违反了主键唯一性约束..
5.存储过程和数据表的字段名不一致(中间发生了重命名).
6.传入的变量与实际查询或运算的字段类型不一致..比如传入tinyint, 查询时作为int
7.存在定义了但没赋值(set, select into 等),就直接使用的变量
8.存在字段使用了case when后直接into的情况,正确的做法:case when后需要在包一层内嵌视图,之后再查询字段into
排查的一般过程:首先看有没有违反唯一性约束这些,之后看有没有上述问题(用dbforge)断点观察每个变量...
关于mysql: 连接数限制, too many connections 导致mysql不可用的问题.
1.)保证使用完连接,自动释放.
2.)确保没有for,while循环中构造sql,执行sql的情况.
3.)确保定时服务中的扫描间隔不要太密,工作线程数不要太多(线程需要检测状态自动释放)。
4.)可以利用阿里云rds监控工具,优化索引,减少慢查询,慢查询占用时间长,类似不释放的效果。
5.)适当增大数据库的最大连接数。//阿里云rds.myql默认是300
6.其它参数设置.
wait_timeout=500 //阿里云rds.mysql默认:86400
loose_max_statement_time=15000 //单位:毫秒, 查询的最长耗时间,超过则放弃.. 阿里云rds.mysql默认是0(无限制).
show processlist 得到进程,之后: kill {id}
7.)关于大批量数据导入.
使用优化SQL语句:将SQL语句进行拼接,使用 insert into table () values (),(),(),()然后再一次性插入,如果字符串太长,
则需要配置下MYSQL,在mysql 命令行中运行 :set global max_allowed_packet = 210241024*10;消耗时间为:11:24:06 11:25:06;
【常用sql写法】
创建唯一索引.
ALTER TABLE DB_User.data ADD UNIQUE (CompanyName) //建立唯一性索引..
之前companyName是varchar(256),提示超过最差限制767,因为256个utf字符就是256X3=768个字节.. (注:gbk是两个字节,ansi是1个字节,utf-8是3个字节).
后来改为varchar(220),开始创建索引..
mysql级联更新.
UPDATE tb_adminuser,
(SELECT agentid,InitAdminUserID FROM tb_agent WHERE agentid=220491) AS tAgentInitAdmin
SET tb_adminuser.
RoleID=200
WHERE
tAgentInitAdmin.InitAdminUserID=tb_adminuser.adminuserid AND tb_adminuser.agentid=220491;
mysql级联删除.
DELETE tb_usersoft FROM tb_usersoft,(SELECT seriessoftid FROM tb_soft WHERE softid=currSoftID) AS tSeries,
(SELECT softid,seriessoftid FROM tb_soft WHERE enabled=1) AS tSoft
WHERE userid=pCommonUserID AND tb_usersoft.
SoftId=tSoft.softid AND tSeries.seriessoftid=tSoft.seriessoftid;
插入时遇到违反重复键则插入(必须有主键或唯一约束的列).
INSERT INTO
Top(
Key,
Quantity,
LastWeek) VALUES(‘关键词‘, 1, 0) ON DUPLICATE KEY UPDATE
Quantity=
Quantity+ 1;
预览初始化数据(对还没初始化的数据查询出来并构造序号,可基于此构造insert).
SET @i=0; #构造序号的初始化处理
SELECT (@i:=@i+1) pm ,CustomerLable,Remark,RootUserID,NOW(),LableType FROM (
SELECT tb_rootuser.RootUserID,RootUserName,CountOfLable FROM tb_rootuser
LEFT JOIN
(SELECT RootUserID, COUNT(*) AS CountOfLable FROM tb_customerlable GROUP BY RootUserID ) AS tLableCount
ON tb_rootuser.RootUserID=tLableCount.RootUserID
WHERE CountOfLable IS NULL ) AS tEmptySettingUser
INNER JOIN
(
SELECT ‘停机或空号‘ AS CustomerLable, ‘客户停机或线索是空号‘ AS Remark,0 AS LableType
UNION
SELECT ‘响铃但未接‘ AS CustomerLable, ‘响铃但未接‘ AS Remark,1 AS LableType
UNION
SELECT ‘接通无意向‘ AS CustomerLable, ‘接通无意向‘ AS Remark,2 AS LableType
UNION
SELECT ‘接通有意向‘ AS CustomerLable, ‘接通有意向‘ AS Remark,3 AS LableType) AS tSystemLable
ON TRUE
ORDER BY RootUserID ASC,LableType ASC;
本文参考自配置啦,原文:Mysql的配置与日常维护sql
今天带大家了解了MySQL的相关知识,希望对你有所帮助;关于数据库的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~
-
499 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
101 收藏
-
441 收藏
-
308 收藏
-
239 收藏
-
374 收藏
-
392 收藏
-
371 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 义气的豆芽
- 这篇文章内容真是及时雨啊,太细致了,真优秀,码起来,关注博主了!希望博主能多写数据库相关的文章。
- 2023-03-02 07:01:08
-
- 洁净的可乐
- 真优秀,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢大佬分享文章!
- 2023-02-07 16:42:00
-
- 舒适的玫瑰
- 这篇博文真及时,师傅加油!
- 2023-01-21 19:48:25
-
- 体贴的世界
- 受益颇多,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢作者大大分享技术贴!
- 2023-01-21 14:21:52
-
- 靓丽的雪碧
- 这篇技术贴真及时,太详细了,很好,已收藏,关注up主了!希望up主能多写数据库相关的文章。
- 2023-01-20 18:47:53
-
- 强健的夕阳
- 太全面了,码起来,感谢老哥的这篇博文,我会继续支持!
- 2023-01-20 01:55:54