文章目录
1.1 mysqladmin工具如何安装
当你安装好了MySQL软件包(MySQL Community Server)后,就会包含mysqladmin这个客户端工具,你可以理解成是MySQL数据库自带的(非自带的不一定说就是第三方的)。我们也是可以只安装mysqladmin这个客户端工具,具体的方法可以通过以点我进行查看
1.2 mysqladmin工具有何作用
mysqladmin是非交互连接到MySQL实例后执行自身所提供的命令(注意:不是SQL语句)去获取MySQL的配置、当前状态等,也可以创建和删除数据库、修改用户密码等。以下是关于mysqladmin非交互工连接的说明。
mysqladmin -uroot -p -S /data/mysql/3306/run/mysql.sock ping
# 交互式下提示你你输入用户密码,然后非交互式成功连接MySQL后执行ping命令;
mysqladmin -uroot -p -S /data/mysql/3306/run/mysql.sock
# 你可能想到的是我连接到mysql实例后,再手动输入ping,是不行的哈
# 一是mysqladmin不能交互式的连接到mysql实例,二是ping在mysql中无法执行(不信你用mysql命令连接后执行一下试试)
另外还要考虑到你所连接的用户有没有相关的权限去执行命令。
1.3 mysqladmin工具语法说明
mysqladmin [OPTIONS] command command.
1.4 mysqladmin读取文件获取连接信息
获取连接信息是是指连接MySQL实例时要用到的用户名、密码、端口、地址等,你至少要先非交互式连接成功后再执行其提供的命令吧。它会到哪去找,找到了会读取什么?找不到又怎样呢?
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
The following groups are read: mysqladmin client
找配置文件(my.cnf)的先后顺序依次为:/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 找到配置文件(my.cnf)后读取[mysqladmin]选项或者[client]选项下面的相关参数,到底是以[mysql]选项下面的相关参数为准还是以[client]选项下面的相关参数为准。这个就看:有没有同时存在。若同时存在,哪个在下面/后面就以谁的为准。
--no-defaults
###### 命令说明
#
# 表示mysqladmin命令不会去找 /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 这些文件
# 你用了它,也不能再使用--defaults-file参数来另外指定一个文件读取其中[mysqladmin]或者[client]下的相关参数来获取连接信息。
#
###### 该参数生产中可用不
#
# 这个参数可以用,防止一台服务器上安装了两套MySQL软件包(安装的方式又不一样)。你自己维护的数据库情况你应该要把控住。
--defaults-file=
###### 参数说明
#
# 从一个文件中的[mysqladmin]选项或者[client]选项下面读取相关的参数来获取连接信息,最后非交互连接到MySQL服务端执行命令。
# 就不会去找 /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 这些文件了
#
###### 该参数生产中要用不
#
# 我生产中不用这个参数,为啥,看后面的示例
#
###### 示例1,从my.cnf中读取信息
# 01:我想用root@localhost超级用户去登录MySQL服务端后执行ping命令,命令如下:
# mysqladmin --defaults-file=/data/mysql/3306/etc/my.cnf ping
# 02:我就得在my.cnf中(最好是尾部)配置如下信息(不用重启MySQL):
# [mysqladmin] # 也可以写成client
# user=root
# password=chenliang
# socket=/data/mysql/3306/run/mysql.sock
# 03:不建议这样做,记录了密码,不安全(做法就不对,不要说你有其它手段来防止)。
#
####### 示例2:不从my.cnf中读取信息
# 01:我想用root@localhost超级用户去登录MySQL服务端后执行ping命令,命令如下:
# mysqladmin --defaults-file=/tmp/a ping
# 02:我就得在/tmp/a中配置如下信息:
# [client] # 也可以写成mysqladmin
# user=root
# password=chenliang
# socket=/data/mysql/3306/run/mysql.sock
# 03:不建议这样做,记录了密码,不安全(做法就不对,不要说你有其它手段来防止)。
1.5 mysqladmin工具常用参数
######## 获取 mysqladmin 命令的帮助和版本信息
--help
# 等于--?参数,获取mysqladmin工具/命令的帮助,例如:mysql --help 或者 mysql -I
-V
# 等于--version参数,查看mysqladmin这个客户端工具的版本
######## 指定文件获取连接信息(用户名、密码、连接地址、端口)
--no-defaults
# 不让mysqladmin命令去 /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 这些文件
# 中读取[mysqladmin]选项或者[client]选项下获取相关的连接信息。同时--defaults-file参数也无法用了。生产中可以用。
--defaults-file=
# 指定mysql从某个文件的[mysqladmin]或者[client]选项获取连接信息(用户、密码、连接地址等),我生产中不用。
# 具体看 1.4 章节
######## 连接mysqladmin实例的相关参数
-u
# 等于--user= 参数,指定连接mysql的用户名。
# 例如:mysqladmin -u root ...................
# 例如:mysqladmin --user=root ...................
-p
# 等于--password= 参数,指定连接mysql的用户的密码。
# 例如:mysqladmin -uroot -pchenliang ...................
# 例如:mysqladmin --user=root --password=chenliang ...................
# 不建议在命令行暴露密码,当然linux下是可以解决这个问题的,这里不告诉你。指定了参数,没有指定密码,会出现交互式界面让你输入密码
-S
# 等于--socket=,指定mysql实例的socket文件。该参数没有默认值(不指定的话,那么它会去找/tmp/mysql.sock)
# 例如:mysqladmin -uroot -pchenliang
# <== 会找/tmp/mysql.sock,没有的话,我们可以做个软链接;
# 例如:mysqladmin --user=root --password=chenliang -S /data/mysql/3306/run/mysql.sock
# <== 人为指定了,若不存在,不会去找/tmp/mysql.sock
-h
# 等于--host=参数,指定可以连接到mysql实例的IP地址或者主机名,该参数没有默认值;
# 例如:mysqladmin -uchenliang -plili -h10.0.0.21 ......................
# 例如:mysqladmin --user=chenliang --password=lili --host=10.0.0.21 ..........
-P
# 等于--port=参数,指定MySQL实例的端口,该参数没有默认值;
# 例如:mysqladmin -uroot -plili -h10.0.0.21 -P3306
# 例如:mysqladmin --user=root --password=lili --host=10.0.0.21 --port=3306
1.6 mysqladmin工具常用命令
ping
# 检查相关的mysql实例是否存活。完整命令如下所示:
# mysqladmin --no-defaults -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock ping
# 若存活,返回mysqld is alive字符串,linux下echo $?就是0
# 若不存活,返回的信息中包含failed,linux下echo $?就是1
# PS:至于用户:用户要存在,用户可以没有任何权限,就别说范围了;
version
# 查看mysql实例的版本信息,同时还可看到mysql实例运行了多长时间
# 例:mysqladmin --no-defaults -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock version
create [databasename]
# 在mysql实例中创建新的数据库,完整的命令如下所示:
# mysqladmin --no-defaults -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock create chenliang
# 无法指定数据库的字符集,这样就会继承mysql service端的字符集,即character_set_server参数指定的字符集
# PS:关于用户:用户的权限要具备create,同时范围必须是 *.*
drop [databasename]
# 在mysql实例中drop掉数据库,完整的命令如下所示:
# mysqladmin --no-defaults -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock -f drop chenliang
# PS:生产中不能随便drop库哈
# PS:关于用户:用户的权限要具备drop,同时范围必须是 *.*
flush-logs
# 刷新日志,连接的用户要有相应刷新log的权限
# 例如:mysqladmin --no-defaults -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock flush-logs
processlist
# 显示服务器中活动线程的列表
# 例如:mysqladmin --no-defaults -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock processlist
password [new-password]
# 为当前用户更改密码,前提是你得知道你当前用户的正确密码;
# 例:当前mysql实例中 lili@172.16.1.% 用户,密码:lili123456 权限是对chenliang库下所有表有select、insert、update权限
# 将lili@172.16.1.%用户的密码从lili123456修改成lili666666,如下所示
# 例:mysqladmin --no-defaults -ulili -plili123456 -h172.16.1.21 -P3306 password lili666666
flush-privileges
# 刷新权限,例如:mysqladmin --no-defaults -uroot -pchenliang -S /data/mysql/3306/run/mysql.sock flush-privileges
shutdown
# 关闭 mysql 实例服务,我工作中会用它,完整的命令如下所示:
# mysqladmin --no-defaults -ushut -pchenliang -S /data/mysql/3306/run/mysql.sock shutdown
# PS:用户的权限要具备shutdown,同时范围必须是 *.*
# PS:我生产中就是创建一个shut@localhost用户,然后给该用户只授权shutdown权限,范围是*.*
# 具体的可以参考 https://chenliang.blog.csdn.net/article/details/104577640 博文