前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >技术分享 | MySQL 编写脚本时避免烦人的警告

技术分享 | MySQL 编写脚本时避免烦人的警告

作者头像
爱可生开源社区
发布于 2022-09-26 02:08:44
发布于 2022-09-26 02:08:44
55700
代码可运行
举报
运行总次数:0
代码可运行

作者:杨涛涛

资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQLMongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。

本文来源:原创投稿

* 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


有客户在编写前期数据库安全规范时,就如何更安全的在 Linux Shell 端操作 MySQL 这一块,让我们帮忙出一份详尽的说明文档。其中有一项内容就是如何在 Linux Shell 下调用 MySQL 各种命令行工具时屏蔽掉烦人的告警信息输出,诸如下面这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# mysql -uytt -proot -e "select version()"
mysql: [Warning] Using a password on the command line interface can be insecure.
+-----------+
| version() |
+-----------+
| 8.0.29    |
+-----------+

其实这是一个非常古老的问题!百度随便一搜,各种解决方法都有,但都写的不是很完善。

这样的告警信息对命令执行结果的输出非常不友好,那么我们如何屏蔽掉它?下面我来罗列下几种我能想到的方法,以供参考。

1、给用户空密码(不推荐)

给用户赋予空密码虽然可以屏蔽掉警告信息,但是极不安全,类似于 MySQL 服务初始化时的 --initialize-insecure 选项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# mysql -u ytt_no_pass -e "select user()"
+-----------------------+
| user()                |
+-----------------------+
| ytt_no_pass@localhost |
+-----------------------+

2、配置文件不同块加入用户名密码(不推荐)

MySQL 的配置文件有 my.cnf、mysql.cnf、mysqld.cnf 等等,只要在这些配置文件里的不同块下添加对应的用户名和密码即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# cat /etc/mysql/conf.d/mysql.cnf
[mysql]
prompt=mysql:\d:\v>
user=ytt
password=root
port=3340
[mysqldump]
user=ytt
password=root
port=3340
   
[mysqladmin]
user=ytt
password=root
port=3340

以上 [mysql] 块下的内容表示对 mysql 命令行生效,[mysqldump] 块下的内容表示对 mysqldump 工具生效,[mysqladmin] 块下的内容表示对 mysqladmin 工具生效。

或者写简单点,统一加到 [client] 里,表示对所有客户端生效。注意只能把共享的部分内容加到这里。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# cat /etc/mysql/conf.d/mysql.cnf
[mysql]
prompt=mysql:\d:\v>
[client]
user=ytt
password=root
port=3340

由于这些块都是针对客户端设置,不需要重启 MySQL 服务,可立即生效。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# mysql -e "select user()"
+---------------+
| user()        |
+---------------+
| ytt@localhost |
+---------------+

3、设置 MySQL 环境变量(不推荐)

MySQL 有一些内置环境变量,对所有客户端生效。官方的环境变量列表如下:https://dev.mysql.com/doc/refman/8.0/en/environment-variables.html

给当前用户设置所需的环境变量,之后再调用命令行工具即可。比如设置密码环境变量 MYSQL_PWD 、传统 TCP 端口环境变量 MYSQL_TCP_PORT 等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# export MYSQL_PWD=root MYSQL_TCP_PORT=3340 
   
root@ytt-ubuntu18:/home/ytt# mysql -uytt -e "select user()"
+---------------+
| user()        |
+---------------+
| ytt@localhost |
+---------------+

此方法也不推荐使用,环境变量 MYSQL_PWD 容易被其他用户获取。比如直接用 ps 命令就可以轻易获取 MYSQL_PWD 的值。

用户1执行如下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# mysql -uytt -e "select sleep(1000)"

用户2执行 ps aex 就可以打印出环境变量 MYSQL_PWD 和 MYSQL_TCP_PORT 的值:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# ps aex| grep MYSQL_PWD| grep -v 'grep'
7592 pts/0    S+     0:00 mysql -uytt -e select sleep(1000) LS_COLORS=rs=0:... MYSQL_PWD=root ...MYSQL_TCP_PORT=3340 ...

4、屏蔽标准错误输出内容,重定向到空设备文件(推荐)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# mysql -uytt -proot -P3340 -e"select version()"  2>/dev/null
+-----------+
| version() |
+-----------+
| 8.0.29    |
+-----------+

这里利用 Linux 系统本身的特性来重定向 MySQL 错误信息,其中数字2代表错误输出的文件描述符;/dev/null 代表空设备。也就是说把执行这条命令的错误信息重定向到空设备而不是标准输出,这样就可以变相的把警告信息屏蔽掉。

5、使用 mysql_config_edit 工具生成不同的 login_path (推荐)

mysql_config_edit 是 MySQL 官方发布的一款工具,专门处理这类必须暴露用户密码的问题,可以进行一次设置,多次安全使用。

使用方法如下:设置一个 login_path ,名字为 user_ytt ,密码按提示输入即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# mysql_config_editor set -G user_ytt -S /var/run/mysqld/mysqld.sock -u ytt -p
Enter password: 

接下来,调用任何 MySQL 命令行工具只需要带上 --login-path 选项即可使用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-ubuntu18:/home/ytt# mysql --login-path=user_ytt -e 'select user()'
+---------------+
| user()        |
+---------------+
| ytt@localhost |
+---------------+
   
root@ytt-ubuntu18:/home/ytt# mysqladmin  --login-path=user_ytt ping
mysqld is alive

mysql_config_editor 工具也有一个缺点:同样的 login_path 不能分享给所有系统用户,其他用户得重新添加自己的 login_path 才能正常使用。

6、使用 Unix socket 插件(推荐,仅限本地)

auth_socket 插件只根据本地 OS 登录用户名和本地 linux socket 文件来授权认证。比如修改用户 ytt@localhost 插件为 auth_socket :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> alter user ytt@localhost identified with auth_socket ;
Query OK, 0 rows affected (0.00 sec)
   
mysql> \q
Bye

切换到 OS 用户 ytt :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@ytt-pc-big:/home/ytt# su ytt
   
ytt@ytt-pc-big:~$ mysql -e "select user(),current_user()"
+---------------+----------------+
| user()        | current_user() |
+---------------+----------------+
| ytt@localhost | ytt@localhost  |
+---------------+----------------+
这里需要提醒一句:为了安全,操作 MySQL 的用户权限一定要做到按需分配。
本文关键字:#MySQL 免密码输入# #MySQL 安全#
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
技术分享 | MySQL 设置管理员密码无法生效一例
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
爱可生开源社区
2022/09/26
7540
技术分享 | MySQL 设置管理员密码无法生效一例
昨天某位客户向我咨询这样一个问题:他通过本地 MySQL 命令行连接数据库发现管理员不需要验证密码即可进行后续操作。为了查明原因,他尝试过修改管理员密码,依然无效。为了对比,他还特意创建了一个带密码的新用户,通过 MySQL 命令行可以正常进行密码验证。
爱可生开源社区
2022/06/01
5430
新特性解读 | MySQL 8.0 新密码策略(终篇)
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
爱可生开源社区
2022/02/09
1.6K0
技术分享 | MySQL 数据库如何改名?
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
爱可生开源社区
2020/06/19
5.6K0
CentOS系统使用yum安装MariaDB数据库实现多实例
上一篇实现二进制安装MariaDB 现在开始yum安装MariaDB数据库实现多个实例 废话不多说直接开始 1.安装和启动 安装:yum install mariadb-server 路径:rpm -ql mariadb-server [root@centos7 ~]#ls /var/lib/mysql //默认没东西 [root@centos7 ~]#systemctl start mariadb //启动mariadb [root@centos7 ~]#ls /var/lib
咻一咻
2020/05/29
8380
MySQL 多实例安装
useradd -r -s /sbin/nologin -d /app/mysql -m mysql # #
星哥玩云
2022/08/16
1.6K0
MySQL 多实例安装
你真的知道如何连接mysql么
可以在my.cnf配置文件的[client]标签下增加用户信息处理。但是,该方式默认使用的/etc/my.cnf配置文件下的信息,因此需要调整该目录下的对应标签下的信息
俊才
2019/09/12
1.2K0
你真的知道如何连接mysql么
新特性解读 | MySQL 8.0 新密码策略(下)
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
爱可生开源社区
2021/12/20
7380
在腾讯云 Ubuntu18.04 安装配置 MySQL 5.7(踩坑警告)
前言 和标题一样,本文的主要内容就是在腾讯云 Ubuntu18.04 上安装配置 MySQL 5.7,之所以要写这篇文章是因为前两天和朋友讨论现在的 mysql 设置 root 账户的密码上和以前不一
出其东门
2019/08/20
2.7K0
python数据库-MySQL安装问题总结(48)
因为安装的过程中没让设置密码,可能密码为空,但无论如何都进不去mysql。那么该怎么做呢
Se7eN_HOU
2019/07/10
1.3K0
python数据库-MySQL安装问题总结(48)
实现一个 MySQL 配置对比脚本需要考虑哪些细节?
想必在日常运维 MySQL 的过程中,无论是主从搭建、版本升级、数据迁移,还是定期巡检,我们总会遇到需要对比 MySQL 配置的场景。这种看似简单的需求,实际操作中隐藏着很多细节和挑战。
爱可生开源社区
2025/04/23
990
实现一个 MySQL 配置对比脚本需要考虑哪些细节?
技术分享 | ProxySQL 搭配 MySQL HA (上)
资深数据库专家,专研 MySQL 十余年。擅长 MySQL、PostgreSQL、MongoDB 等开源数据库相关的备份恢复、SQL 调优、监控运维、高可用架构设计等。目前任职于爱可生,为各大运营商及银行金融企业提供 MySQL 相关技术支持、MySQL 相关课程培训等工作。
爱可生开源社区
2021/12/27
9930
MYSQL多实例配置详解.md
Q:什么是MySQL多实例? 答:简单的说,就是在一台机器上开启多个不同的服务端口(如: 3306、 3307 ) ,运行多个 MysQL 服务进程,服务进程通过不同的 socket 监听不同的服务端口来提供各自的服务。
全栈工程师修炼指南
2022/09/28
1.7K0
MYSQL多实例配置详解.md
MYSQL介绍安装及一些问题解决
一、简介 MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。有以下特点: MySQL是一种数据库管理系统。 MySQL是一种关联数据库管理系统。 MySQL软件是一种开放源码软件。 MySQL数据库服务器具有快速、可靠和易于使用的特点。 MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。 有大量可用的共享MySQL软件。 MySQL表最大能达到多少? InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超
程序员同行者
2018/06/22
6210
MySQL提示ERROR 1698 (28000): Access denied for user ‘root’@’localhost’错误解决办法
linuxidc@linuxidc:~/www.linuxidc.com$ mysql --version mysql  Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using  EditLine wrapper
星哥玩云
2022/08/18
2.5K0
MySQL提示ERROR 1698 (28000): Access denied for user ‘root’@’localhost’错误解决办法
萌新尝鲜,超越Windows的Deepin
同ubuntu一样,深度系统也是使用apt-get安装软件,配置源的方式同Ubuntu配置源与安装软件,更换deepin的源就行
暖月寒星
2020/03/12
4850
新特性解读 | MySQL 8.0 新密码策略(中)
假设有这样的需求: 管理员创建了两个用户,职责分别是开发和运维,并且要求这两个用户必须满足如下需求,
爱可生开源社区
2021/12/11
8730
MySQL命令使用技巧|新手指引
按顺序加载,后面的会把前面的覆盖掉。可以识别配置文件中:[client] [mysql] ,如下:
wubx
2019/02/27
8830
# 示例环境
​ 想必很多新手都避免不了有这些疑问,都想一次性投入精力解决以上问题,下面我用我理解的方式帮助你解决这些疑问。
用户1175783
2020/05/09
1.3K0
MySQL 安全登陆工具 mysql_config_editor
MySQL_config_editor 帮助信息请查看 man mysql_config_editor 或 mysql_config_editor -? 或 mysql_config_editor s
星哥玩云
2022/08/17
2K0
推荐阅读
相关推荐
技术分享 | MySQL 设置管理员密码无法生效一例
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验