mysql 学习记录06-MySQL命令行工具

MySQL的命令行工具不少,从大体上可以分为服务端和客户端两类。服务端工具包括mysql_install_db,mysqld_safe,mysqld以及mysqld_mutli,数量不多,但是非常重要。客户端工具有五花八门了。

mysql_install_db--MySQL建库工具

这个命令用来初始化与MySQL数据库系统表相关的物理文件。所创建的文件如果没有特别别指定,都会保存在data目录下,所以对改命令而言,指定data路径的--datadir就是最重要的参数之一。

需要注意这个命令不是在bin目录下,而是在script目录下

# datadir用于指定生成的文件的存放路径
# basedir用于指定mysql的目录,有可能会用mysql相关的命令
mysql_install_db --datadir=/data/mysqldata/3306/data --basedir=/usr/local/mysql

mysqld_safe--MySQL启动工具

mysqld_safe用于启动MySQL服务,在启动前会做安全检查,如果发现目前已经有MySQL服务在运行会抛出错误信息。
可以使用--defaults-file指定配置文件

mysqld_safe --defaults-file=/etc/my.cnf &

注意在命令行最后加了&符号,改符号的功能是将执行的命令行进程放到后台执行。

mysqld--MySQL主进程

真正控制MySQL服务的进程就是mysqld了
可以使用mysqld --verbose --help查看配置
如果想要知道怎么用mysqld启动数据库,可以执行ps -ef| grep mysql

[root@jin plugin]# ps -ef| grep mysql
root       4257      1  0 Nov18 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql      4523   4257  0 Nov18 pts/0    00:00:26 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock

每个MySQL服务对应一个端口,每个端口对应一个mysqld进程

作为MySQL数据库中最重要的关键进程之一,除了拥有众多系统参数(MySQL服务的启动时参数),还拥有相当多的系统变量(MySQL服务的运行时参数),以及一系列的系统变量(记录MySQL服务的运行时状态)。

简单来说系统参数就是命令行选项,在执行命令时指定,用以控制时间不同功能或设定。

系统变量可以使用show [global] variables;查看,绝大多数的系统参数都有对应的同名系统变量,只不过系统参数是在服务启动时指定,系统变量则可以在服务运行时修改。

注意系统变量有作用域的概念,分为全局(GLOBAL)和会话(SESSION)两类。可以用set global variables_name = 1;

需要注意不管是全局还是局部变量,在服务重启后都会失效,所以记得要把修改的配置加到配置文件中。

状态变量就是记录MySQL服务运行时的系统状态。状态变量也有作用域,分为全局(GLOBAL)和会话(SESSION)两类,前者是记录整个MySQL服务的状态,而后者只代表当前会话的状态。可以使用show [global] status;查看。

mysqld_multi--MySQL多实例管理工具

这个命令可以同时管理多个mysqld实例,改命令的格式如下

mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR,GNR,GNR...]
or
mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR-GNR,GNR,GNR-GNR,...]

mysqld_multi会扫描my.cnf文件中的区块名(即组名),即[mysqldN]。我们知道默认配置文件中mysqld区块的配置是没有后面的N的,但是如果希望通过mysqd_multi来管理MySQL,就需要配置个N了。这个N既起到唯一的作用,又能标识mysqld进程。具体怎么配置可以使用mysqld_multi --example查看

配置步骤

1. 初始化数据

注意执行之后会随机生成一个root@locahost的密码,记得保存下来

# 5.7后用mysql_install_db看不到随机生成的密码
mysqld --initialize --user=mysql --datadir=/var/lib/mysql3307

2. 修改配置文件my.cnf

[mysqld1]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
collation-server=utf8_general_ci
skip-character-set-client-handshake
federated
# 设置server id
server_id = 888888
# # 设置binlog存放路径
log-bin = mysql-bin
#log-bin-index = master-bin.index

[mysqld2]
mysqld     = /usr/sbin/mysqld
#ledir      = /path/to/mysqld-binary/
mysqladmin = /usr/bin//mysqladmin
socket=/var/lib/mysql/mysql3307.sock
port       = 3307
datadir=/var/lib/mysql3307
symbolic-links=0
log-error=/var/log/mysqld3307.log
pid-file=/var/run/mysqld/mysqld.3307pid
character-set-server=utf8
collation-server=utf8_general_ci
user=mysql
federated

4. 服务管理相关命令

# 开启mysql2服务
mysqld_multi start 2
# 开启mysql6,mysql7,mysql8服务
mysqld_multi start 6-8
# 查看服务是否启动
mysqld_multi report 2
Reporting MySQL servers
MySQL server from group: mysqld2 is running
# 关闭服务,注意关闭命令必须输入用户和密码才能生效
mysqld_multi stop 2 -user=root -password=Zj123$%^

mysql--专业命令行工具

相关参数

1. --auto-rehash

自动补全功能,类似linux命令行下的tab键自动补全命令。注意,注意启用此参数后,登录mysql的时间可能会有一定的延长,因为需要加载相关的字典信息,才能实现自动补全

2. --default-character-set

用于指定连接会话的字符集,相当于在连接到MySQL后,执行SET NAMES设置当前会话字符集

3. -e,--execute

mysql命令支持两种操作方式:交互模式和非交互模式。常规应用都是进入到交互模式下,而后执行MySQL的各种DML/DDL/DCL语句,或其他语句。有时我们不需要进入命令行模式,而是在执行mysql命令时直接执行要执行的语句,这种就可以用-e实现,如下

[root@jin mysql3307]# mysql -h 127.0.0.1 -P 3307 -u root -p123456 -e "show global variables like '%master%';"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| master_info_repository | FILE  |
| master_verify_checksum | OFF   |
| sync_master_info       | 10000 |
+------------------------+-------+
4. -f,--force

通过mysql命令批量执行sql语句(或者执行一个包括SQL语句的文件,总之是在非交互模式)时,如果要执行的某条sql有错误,那么默认情况下该条语句后面的语句就都不会执行。这个参数的作用在于,即使前面有sql语句由错误,也不会影响后面语句的执行。

5. --show-warnings

执行完语句之后,马上显示警告信息,相当于执行完SQL语句之后再自动执行SHOW WARNING语句

相关技巧

mysql是个命令行工具,进入到交互模式的命令行后,它不仅具有执行SQL语句(各类DML/DDL/DCL)的本领,自己提供了若干命令,这些命令主旨是帮助DBA更好的执行SQL语句。
可以使用help命令查看相关的命令,说几个比较常用的

1. pager

可以视作mysql命令行模式中的管道符,如下

# 设置,pager后面接的是系统命令
pager more
# 查询看看效果吧
select * from member limit 100
# 取消
nopager
2. prompt

可以用于指定mysql命令行的提示符,可以显示当前的数据库,用户等信息,具体的可以百度,可以配置直接叫到配置文件中

3. rehash

自动补全

4. Tee

指定内容输出到外部文件,如下

# 开始
tee /tmp/mysql_tee.txt
# 执行sql
select * from mysql.user;
#结束
notee

mysqladmin--管理工具

通过该工具可以完成检查服务器配置,当前状态,创建/删除数据库等操作。
命令格式如下

mysqladmin [OPTIONS] command command ...

参数

参数很多,记录几个比较特别的参数

-i,--sleep

间隔指定时间后,再次重复调用本mysqladmin命令

-r,--relative

当与-i参数联合使用并且指定了extends-status命令时,显示本次与上次之间个状态值的差异

命令

create [dbname]

创建数据库

drop [dbname]

删除数据库

extended-status

查看服务器状态信息,跟show global variables一样

flush-hosts

刷新缓存信息

flush-logs

刷新日志

flush-status

充值状态变量

flush-tables

刷新所有表

flush-thread

刷新线程缓存

flush-privileges

重新加载授权表,与reload完全相同

reload

与上面的命令相同

refesh

刷新所有表,并切换日志文件

password [new-password]

修改指定用户的密码,只是按照旧的格式修改

ping

通过ping的方式,检查当前MySQL服务是否仍能正常提供服务

debug

输出当前MySQL服务的调试信息到error_log文件中,某些情况下性能分析或故障排查非常实用

kill id,id,...

杀掉连接至MySQL服务的进程,与KILL id功能相同

processlist

查看当前MySQL服务所有的链接线程信息,功能完全等同于SHOW PROCESSLIST语句

shutdown

关闭服务

status

查看当前MySQL的状态,功能与mysql命令行模式下的status类型,这个命令相当于只显示mysql命令行模式下status命令的最后一行信息,能够获取较为关键的几项指标。
status命令返回的信息包含

Uptime : MySQL服务的启动时间
Thread : 当前链接的会话数
Questions : 自MySQL服务为启动后,执行的查询语句数量
Slow Queries : 慢查询语句的数量
Opens : 当前处于打开状态的表对象的数量
Flush tables : 执行过flush,refresh和reload命令的数量
Open tables : 当前会话打开的表对象的数量
Queries per second avg : 查询的执行频率
start-slave

启动slave服务

stop-slave

停止slave服务

variable

显示系统变量,与show global variables相同

version

查看版本信息,同时还包含status命令的信息

其他常用命令

myisamchk

用于MyISAM表对象的检查和修复

myisam_ftdump

输出MyISAM全文索引

innochecksum

计算InnoDB数据文的checksum

mysqldumpslow

分析慢查询日志

mysqlbug

向MySQL官方输出bug

其他工具

就不说了...
phpMyAdmin,MySQL Workbench,Navcat之类。。。

标签: mysql

添加新评论