Linux下mysql数据库服务管理,主要有service方式和命令行管理两种方式。
方式一:通过service方式管理
mysql数据库如果在 /etc/init.d/目录下,拷贝了mysqld命令文件:
# ls -l /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10880 Jul 25 14:21 /etc/init.d/mysqld
# chkconfig --add mysqld
这样可以使用下面的命令,是MySQL数据库服务开机自动启动:
# chkconfig --level 35 mysqld on
然后可以通过下面的命令进行数据库服务器的控制:
# service mysqld status --查看mysqld服务状态
# service mysqld start --启动mysqld服务
# service mysqld stop --关闭mysqld服务
注意:/etc/init.d/目录下的mysqld,可能通过find命令查询不到,需要记忆和熟悉mysqld命令的位置:
# find /etc/init.d -name mysqld
#
方式二:通过mysql命令管理
通过命令管理mysql的常用命令大多存放在mysql数据库编译安装目录下的/usr/locaol/mysql/bin目录下:
# cd /usr/local/mysql/bin
# ls
innochecksum mysqlaccess.conf mysqld mysqlhotcopy mysql_tzinfo_to_sql
msql2mysql mysqladmin mysqld-debug mysqlimport mysql_upgrade
myisamchk mysqlbinlog mysqld_multi mysql_plugin mysql_waitpid
myisam_ftdump mysqlbug mysqld_safe mysql_secure_installation mysql_zap
myisamlog mysqlcheck mysqldump mysql_setpermission perror
myisampack mysql_client_test mysqldumpslow mysqlshow replace
my_print_defaults mysql_client_test_embedded mysql_embedded mysqlslap resolveip
mysql mysql_config mysql_find_rows mysqltest resolve_stack_dump
mysqlaccess mysql_convert_table_format mysql_fix_extensions mysqltest_embedded
#
与mysql相同的命令行行工具主要有:
mysql_install_db:用于mysql创建数据库
mysqld_safe:用于启动mysql服务
mysqld:mysql服务主进程
mysql_multi:mysql多实例管理工具
mysql:mysql专业命令行工具
mysqladmin:mysql管理工具
1. mysql_install_db—mysql建库工具
mysql_install_db命令用于建库,由它来初始化与MySql数据库系统表相关的物理文件,所有的文件如果不指定都会保持在data下,所以指定data路径的参数 --datadir就是最重要的参数;
另外mysql_install_db命令不是在BIN下,是在scriptes目录下,执行语法为:
$ /usr/local/mysql/scripts/mysql_install_db --datadir=/data/mysqldata/3306/data --basedir=/usr/local/mysql
指定basedir参数是为了在建库时保证能够调用到其他工具,加--help可以查看该命令的详细帮助信息,该命令是一个Perl命令脚本,可以研究。
2. mysqld_safe—mysql 启动工具
数据库的物理文件就绪,要让其工作就需要启动MySql服务。而mysqld_safe命令就是启动MySql服务的命令,其最重要的参数是 --defaults_file ,指定启动时用的配置文件,并读取其中的参数值,通过--help可以查看所有支持的参数选项。mysql_safe命令执行格式为:
$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysqldata/3306/my.cnf &
命令最后加 & 符号,是为了后台执行,防止窗口关闭而中断服务;另外mysqld_safe是做了进程的安全检查;mysql_db_startup命令也是调用了mysql_safe命令。
3. mysqld—mysql 主进程
不论是Windows平台,还是Linux平台,真正控制MySql服务的进程是mysqld。mysqld_safe是调用了mysqld,当然可以用mysqld直接启动数据库服务,但可以指定的参数就比较多了。
查看mysqld可以支持的参数:
$ mysqld --verbose --help
查看当前3306端口的MySQL服务对应的mysqld进程启动参数:
$ ps -ef|grep mysql
每个MySQL服务对应一个端口,每个端口对应一个mysqld进程。
系统变量可以再MySQL命令行模式中,通过 show [global] variables命令查看,如查看于log相关的系统变量,执行命令如下:
mysql> show global variables like 'log%';
绝大多数系统参数都与对应的同名的系统变量,不仅名称相同,功能也相同;但参数只能在启动时修改,变量可以随时修改,DBA可以根据需求动态调整变量值,以最大化发挥MySQL数据库的能力。
注意:不是所有系统变量都可以动态调整,那些可以动态调整,那些不可以动态调整,可以参数官方文档。
如,希望将当前MySQL的二进制日志文件修改为基于row格式,又不希望重启数据库,就可以直接修改系统变量:
mysql> set global binlog_format=row;
mysql> show global variables like 'binlog_format';
注意:系统变量有作用域的概念,分为全局global和会话session两类,修改全局对所有有效,但对当前无效:
mysql> show global variables like 'binlog_format';
系统变量的修改,在重启后都会失效,如果要长久保持,还是要写入配置文件中。
状态变量是记录该MySQL服务的系统状态,记录的越全越好;状态变量也有作用域,分为全局global和会话session两类,前者记录整体状态,后者记录会话状态,查看方式如下:
mysql> show golbal status;
4. mysqld_multi—mysql 多实例管理工具
mysqld_multi命令的调用方式如下:
$ mysql_multi [options] {start|stop|reload|report} [GNR[,GNR]...]
从语法上来看很简单,指定选项;指定要做的操作,只有4个,分别控制启动、停止、重新加载、状态报告;最后一个是指定要操作的实例了;
mysql_multi参数要正常使用,需要在my.cnf中配置,配置方法如下:
$ mysqld_multi --example
比如在my.cnf中定义了[mysqld34]这个区块,那么启动这个区块对应的mysqld进程,执行命令如下:
$ mysqld_multi start 34
如果定义了[mysqld6],[mysqld7],[mysqld8]三个区块,想一次批量停止所对应的mysqld进程,可以分别指定GNR值为6,7,8,也可以使用下面的命令:
$ mysqld_multi stoo 6-8
注意:mysqld_multi可能应用较少,只是操作时看起来简单,但配置环境比较复杂,相比而言使用mysqld_safe命令和mysqladmin命令更加灵活。如果想要使用mysqld_multi,需要研究,尤其是线上应用,需要慎重,my.cnf一定要配置正常。
5. mysql—专业命令行工具
mysql工具类型与Oracle数据量中的sqlplus工具,该命令有比较多的参数可以在启动时指定。
使用mysql连接远程mysql服务器的命令为:
> mysql -h 172.168.0.100 -P3306 -uroot -p'passw0rd'
查看当前Slave的运行状态,可以执行mysql命令并附加-e参数如下:
$ mysql -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock -e "show slave status\G"
如果使用mysql命令批量执行SQL语句,一条出现错误,后面继续执行,可以加-f参数,命令如下:
$ mysql -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock -e"drop table aa.bbccdd;show slave status\G" -f
列出mysql支持的mysql命令:
mysql> help
6 mysqladmin—管理工具
mysqladmin是mysql数据库的专用管理工具,通过该工具可以完成检查服务器配置、当前状态、创建/删除数据库等操作。
mysqladmin命令调用格式如下:
> msyqladmin [OPTIONS] command command ...
创建数据库与在mysql命令模式下执行create database语句没什么区别:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock create testdb
然后可以登录到数据库中看是否已经存在testdb这个数据库了。
使用mysqladmin删除数据库的命令为:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock drop testdb
查看服务端状态的命令:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock extended-status
通过ping的方式,检查当前mysql服务是否仍能够正常提供服务:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock ping
通过processlist查看当前mysql服务所有的连接线程信息,功能等同于show processlist:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock processlist
通过shutdown命令关闭数据库,非常实用+常用:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock shutdown
通过status命令查看当前mysql的状态,相当于status命令的最后一行,能获取几个关键的指标:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock status
通过Version命令查看版本信息:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock -i l status
查看当前mysql服务每秒执行的查询数量,可以通过查看服务端状态变量,并结合-i参数,例如:
$ mysqladmin -uroot -p'passw0rd' -S /data/mysqldata/3306/mysql.sock -i 1 -r extended-status | grep -e "Com_select"
7. 其他常用命令
其他常用命令
mysql带的常用命令除了常用的6个,还有:
myisamchk:专用于MyISAM引擎的MyISAM表对象的检查和修复工具;
myisam_ftdump:一种输出MyISAM全文检索的工具;
innochecksum:用于InnoDB数据文件计算;
mysqldumpslow:用于分析mysql慢查询日志;
mysqlbug:用于向mysql官方输出bug;
通过上面较多命令的说明,与管理mysql服务的命令再总结如下:
使用命令行启动数据库的命令为:
$ /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
使用命令行关闭数据库服务的命令为:
$ /usr/local/mysql/bin/mysqladmin -uroot -p‘passw0rd’ -S /data/mysqldata/3307/mysql.sock shutdown
查看数据库启动、停止日志的命令为:
# cat /etc/my.cnf | grep log-error
log-error = /data/logs/mysql/errors.log
# tail -f /data/logs/mysql/errors.log
使用mysql登录远程数据库的命令为:
$ msyql -h 172.168.1.100 -P 3306 -uroot -p'passw0rd'
创建数据库权限用户:
mysql> grant all privileges on 'testdb'.* to testuser@'%' identified by '123456';
mysql> flush privileges;