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之类。。。