使用最频繁的链接数据库的客户端工具,使用语法以下:mysql
mysql [options] [database]
这里的 options 表示 mysql 的可用选项,能够一次写一个或者多个,甚至能够不写;database 表示链接的数据库,一次只能写一个或者不写,若是不写,链接成功后须要用 “use database”命令来进入要操做的数据库。sql
选项的表达方式有多种,例如:shell
# 这三种方式都是能够的 shell> mysql -u root shell> mysql -uroot shell> mysql -user=root
-u, --user=name 指定用户名 -p, --password[=name] 指定密码 -h, --host=name 指定服务器 IP 或者域名 -P, --port=# 指定链接端口
通常在在本地环境,为了方便,能够在 配置文件 my.cnf 中配置当前用户和密码,配置好后,直接执行 mysql 就能够链接到数据库:数据库
[client] user=root password=000000 port = 3306 socket = /tmp/mysql.sock default-character-set = utf8mb4
配置好后,直接执行 mysql 便可:安全
zj@bogon:~$ mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 19 ...
登陆远程服务器,须要指定地址和端口:服务器
shell> mysql -h 192.168.10.10 -P 3306 -uroot -p
注意: 在正式的生产环境中,为了安全起见,通常须要建立应用帐号并赋予适当权限,而不会用 root 直接操做数据库;默认端口(3306)通常不要使用,能够改成任意操做系统未占用的端口。session
--default-character-set=charset-name
做为服务器的字符集选项,这个选项也能够配置在 my.cnf 的 [mysqld] 组中。一样,做为客户端字符集选项,也能够配置在 my.cnf 的 [mysql]组中,这样每次用 mysql 工具链接数据库的时候就会自动使用此客户端字符集。固然,也能够在 mysql 的命令行中手工指定客户端字符集:socket
shell> mysql -u user -default-character-set=charset
至关于在 mysql 客户端链接成功后执行:工具
set names charset;
-e, --execute=name // 执行 sql 语句并退出
此选项能够直接在 MySQL 客户端执行 sql 语句,对于一些批处理脚本,这是方式尤为方便:优化
zj@bogon:~$ mysql mysql -e "select user,host from user" +-----------+-----------+ | user | host | +-----------+-----------+ | root | 127.0.0.1 | | mysql.sys | localhost | | root | localhost | +-----------+-----------+
能够按这种方式连续执行多个 sql 语句,用英文分号(;)隔开。
-E, --vertical 将输出方式按照字段顺序竖着显示 -s, --silent 去掉 mysql 中的线条框显示
“-E” 选项相似于 mysql 里面执行 sql 语句后加 “G”, 常常和 -e 一块儿使用。
myisampack 是一个表压缩工具,可使用很高的压缩率来对 myisam 存储引擎的表进行压缩,使得压缩后的表占用比压缩前小得多的空间。可是压缩后的表将成为一个只读表,不能进行 DML 操做。
mysqladmin 是一个执行管理操做的客户端程序。能够用它来检查服务器的配置和当前状态、建立并删除数据库等。它的功能与 mysql 客户端很是相似,主要区别在于它更侧重于一些管理方面的功能。
使用语法:
shell> mysqladmin [options] command [command-options]...
能够执行的命令以下:
create databasename Create a new database 新建数据库 debug Instruct server to write debug information to log 把 debug 日志记录到日志文件中 drop databasename Delete a database and all its tables 删除数据库 extended-status Gives an extended status message from the server 查看 MySQL 服务器的状态信息 flush-hosts Flush all cached hosts flush-logs Flush all logs flush-status Clear status variables flush-tables Flush all tables flush-threads Flush the thread cache flush-privileges Reload grant tables (same as reload) kill id,id,... Kill mysql threads password [new-password] Change old password to new-password in current format ping Check if mysqld is alive processlist Show list of active threads in server reload Reload grant tables refresh Flush all tables and close and open logfiles shutdown Take server down status Gives a short status message from the server start-slave Start slave stop-slave Stop slave variables Prints variables available version Get version info from server
举例:
zj@bogon:/usr/local/mysql/bin$ mysqladmin -uroot -p shutdown Enter password:
因为服务器生成的二进制文件以二进制格式保存,因此若是想要检查这些文件的文本格式,就会用到 mysqlbinlog 日志管理工具。
用法以下:
shell> mysqlbinlog [option] log-file1 log-file2...
option 有不少选项:
-s, --short-form: 显示简单格式,省略掉一些信息。
--start-datetime=name --stop-datetime=name: 指定日期间隔内的全部日志。
--start-position=# --stop-position=#: 指定位置间隔内的全部日志
MySQL [(none)]> reset master; Query OK, 0 rows affected (0.01 sec) MySQL [(none)]> create table t1(id int,name varchar); ERROR 1046 (3D000): No database selected MySQL [(none)]> reset master; Query OK, 0 rows affected (0.01 sec) MySQL [(none)]> create database t1; Query OK, 1 row affected (0.04 sec) MySQL [(none)]> create database t2; Query OK, 1 row affected (0.02 sec) MySQL [(none)]> use t1; Database changed MySQL [t1]> create table test1(id int, name varchar(30)); Query OK, 0 rows affected (0.11 sec) MySQL [t1]> insert into test1 value (1,'zj'); Query OK, 1 row affected (0.14 sec) MySQL [t1]> insert into test1 value (2,'zj2'); Query OK, 1 row affected (0.02 sec) MySQL [t1]> use t2; Database changed MySQL [t2]> create table test2(id int,name varchar(30)); Query OK, 0 rows affected (0.02 sec) MySQL [t2]> insert into test2 select * from t1.test1; Query OK, 2 rows affected (0.03 sec) Records: 2 Duplicates: 0 Warnings: 0 MySQL [t2]> select * from t1.test1; +------+------+ | id | name | +------+------+ | 1 | zj | | 2 | zj2 | +------+------+ 2 rows in set (0.02 sec) MySQL [t2]> select * from test2; +------+------+ | id | name | +------+------+ | 1 | zj | | 2 | zj2 | +------+------+ 2 rows in set (0.00 sec)
注意:必须拥有访问目标文件的权限
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 [sudo] password for zj: /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #170920 20:44:49 server id 1 end_log_pos 123 CRC32 0x42fd5a4d Start: binlog v 4, server v 5.7.18-log created 170920 20:44:49 at startup ...... create table test2(id int,name varchar(30)) /*!*/; # at 1366 #170920 20:50:29 server id 1 end_log_pos 1431 CRC32 0x18a95938 Anonymous_GTID last_committed=6 sequence_number=7 SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/; # at 1431 #170920 20:50:29 server id 1 end_log_pos 1509 CRC32 0x2fa8bd6c Query thread_id=4 exec_time=0 error_code=0 SET TIMESTAMP=1505911829/*!*/; BEGIN /*!*/; # at 1509 #170920 20:50:29 server id 1 end_log_pos 1622 CRC32 0x77ce6f3b Query thread_id=4 exec_time=0 error_code=0 SET TIMESTAMP=1505911829/*!*/; insert into test2 select * from t1.test1 /*!*/; # at 1622 #170920 20:50:29 server id 1 end_log_pos 1653 CRC32 0x41b7a45b Xid = 29 COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -d t2 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; ...... SET TIMESTAMP=1505911829/*!*/; insert into test2 select * from t1.test1 /*!*/; # at 1622 #170920 20:50:29 server id 1 end_log_pos 1653 CRC32 0x41b7a45b Xid = 29 COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -o 20 /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; # at 4 #170920 20:44:49 server id 1 end_log_pos 123 CRC32 0x42fd5a4d Start: binlog v 4, server v 5.7.18-log created 170920 20:44:49 at startup # Warning: this binlog is either in use or was not closed properly. ROLLBACK/*!*/; BINLOG ' wWLCWQ8BAAAAdwAAAHsAAAABAAQANS43LjE4LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAADBYsJZEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA AU1a/UI= '/*!*/; # at 1509 #170920 20:50:29 server id 1 end_log_pos 1622 CRC32 0x77ce6f3b Query thread_id=4 exec_time=0 error_code=0 use `t2`/*!*/; SET TIMESTAMP=1505911829/*!*/; SET @@session.pseudo_thread_id=4/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1436549152/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8mb4 *//*!*/; SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; insert into test2 select * from t1.test1 /*!*/; # at 1622 #170920 20:50:29 server id 1 end_log_pos 1653 CRC32 0x41b7a45b Xid = 29 COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -o 20 -r ./logfile zj@bogon:/usr/local/mysql/bin$ sudo more ./logfile /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; ...
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 -o 20 -s /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/; ROLLBACK/*!*/; use `t2`/*!*/; SET TIMESTAMP=1505911829/*!*/; SET @@session.pseudo_thread_id=999999999/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1436549152/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8mb4 *//*!*/; SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; insert into test2 select * from t1.test1 /*!*/; COMMIT/*!*/; SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
zj@bogon:/usr/local/mysql/bin$ sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 --start-datetime="2017/09/30 05:00:00" --stop-datetime='2017/09/30 05:01:00'
开始日期和结束日期能够只写一个。若是只写开始日期,表示范围开始日期到日志结束;若是只写结束日期,表示日志开始到指定的结束日期。
sudo ./mysqlbinlog --no-defaults /data/mysql/mysql-bin.000001 --start-position=4 --stop-datetime=100
mysqlcheck 工具能够检查和修复 myisam 表,还能够优化和分析表。实际上,它集成了 mysql 工具中的 check、repair、analyze、optimize
有 3 种方式能够来调用 mysqlcheck:
shell> mysqlcheck [options] db_name [tables] shell> mysqlcheck [options] --database DB1 [DB2 DB3...] shell> mysqlcheck [options] --all-databse
option 中有如下经常使用选项:
其中,默认选项是 -c (检查表)
示例:
zj@bogon:/data/mysql$ mysqlcheck -c t2 t2.test1 OK t2.test2 OK
zj@bogon:/data/mysql$ mysqlcheck -r t2 t2.test1 note : The storage engine for the table doesn't support repair t2.test2 OK
test1 表的存储引擎为 innodb,不支持 repair。
zj@bogon:/data/mysql$ mysqlcheck -a t2 t2.test1 OK t2.test2 OK
zj@bogon:/data/mysql$ mysqlcheck -o t2 t2.test1 note : Table does not support optimize, doing recreate + analyze instead status : OK t2.test2
mysqldump 客户端工具用来备份数据库或在不一样数据库之间进行数据迁移。备分内容包含建立表或装载表的 sql 语句。
有三中方式来调用 mysqldump:
mysqldump [OPTIONS] database [tables] // 备份单个数据库或者库中部分数据表 mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...] //备份指定的一个或者多个数据库 mysqldump [OPTIONS] --all-databases [OPTIONS] // 备份全部数据库
-u, --user=name // 指定用户名 -p, --password[=name] // 指定密码 -h, --host=name // 指定服务器 IP 或者域名 -p, --port=# // 指定链接端口
示例:
shell> mysqldump -h192.18.10.10 -p3306 -uroot -p test > test.sql
--add-drop-database 每一个数据库建立语句前加上 drop database 语句 --add-drop-table 在每一个表建立语句前加上 drop table 语句
在默认状况下,这两个参数都自动加上。
-n, --no-create-db 不包含数据库的建立语句 -t, --no-create-info 不包含数据表的建立语句 -d, --no-data 不包含数据
root@bogon:/usr/local/mysql/bin# ./mysqldump --compact t2 emp > emp.sql root@bogon:/usr/local/mysql/bin# more emp.sql /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(10) DEFAULT NULL, `context` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; INSERT INTO `emp` VALUES (1,'a','a'),(2,'b','b');
root@bogon:/usr/local/mysql/bin# ./mysqldump -c --compact t2 emp > emp.sql root@bogon:/usr/local/mysql/bin# more emp.sql /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(10) DEFAULT NULL, `context` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; INSERT INTO `emp` (`id`, `name`, `context`) VALUES (1,'a','a'),(2,'b','b');
-T, --tab=name 备份数据和建表语句 --fileds-terminated-by=name 域分隔符 --fileds-enclosed-by=name 域引用符 --fileds-optionally-enclosed-by=name 域可选引用符 --fileds-escaped-by=name 转义字符
示例:将 t2 数据库中的表 emp 导出为单纯的数据文本和建表 sql 两个文件,并存放在当前路径下的 bak 目录下。
root@bogon:/usr/local/mysql/bin# mkdir bak
root@bogon:/usr/local/mysql/bin# ./mysqldump t2 emp -T ./bak
root@bogon:/usr/local/mysql/bin# ls ./bak emp.sql emp.txt
root@bogon:/usr/local/mysql/bin# more ./bak/emp.sql -- MySQL dump 10.13 Distrib 5.7.18, for Linux (x86_64) -- -- Host: localhost Database: t2 -- ------------------------------------------------------ -- Server version 5.7.18-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `emp` -- DROP TABLE IF EXISTS `emp`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `emp` ( `id` int(11) NOT NULL DEFAULT '0', `name` varchar(10) DEFAULT NULL, `context` text, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2017-09-21 12:07:38
root@bogon:/usr/local/mysql/bin# more ./bak/emp.txt 1 a a 2 b b
mysqldump 导出的数据的字符集使用的是 mysqld 启动时的默认字符集,若是表的字符集用的不是默认字符集,导出的数据就有可能出现乱码。因此在导出时,应该先肯定表的字符集,在导出时指定该字符集便可。
shell> mysqldump -uroot --compact --default-character-set=utf8 t2 emp > emp.sql
加上此选项后,备份前将关闭就日志,生成新日志。使得进行恢复的时候直接重新日志开始进行重作,大大方便了恢复过程。
能够在备份期间使用,使得数据没法被更新,从而使备份的数据保持一致性,能够配合 -F 选项一块儿使用。
mysqlimport 是客户端数据导入工具,用来导入 mysqldump 加 -T 选项后导出的文本文件。
基本用法:
shell> mysqlimport [options] db_name textfile1
mysqlshow 客户端对象查找工具,用来很快的查找存在哪些数据库,数据库中的表、表中的列或索引,和 mysql 客户端工具很相似,不过有些特性是 mysql 客户端工具所不具有的。
使用方法:
shell> mysqlshow [option] [db_name [tbl_name [col_name]]]
若是不加任何选项,默认状况下会显示全部数据库。
经常使用选项:
若是不指定数据库,则显示每一个数据库的名称、表数量、记录数量;
若是指定数据库,则显示指定数据库的每一个表名、字段数量,记录数量;
若是指定具体数据库中的具体表,则显示表的字段信息。
此选项显示了两部份内容,一部分是指定表的表结构,另外一部分中是指定表的当前索引信息
在 MySQL 的使用过程当中,可能会出现各类各样的 error。这些 error 有些是因为操做系统引发的,好比文件或者目录不存在;有些则是因为存储引擎使用不当引发的。这些 error 通常都有一个代码,相似于 “error:#” 或者 “Errcode:#”,“#” 表明具体的错误号。perror 的做用就是解释这些错误代码的详细含义:
perror [options] [errorcode [errorcode]] zj@bogon:/usr/local/mysql/bin$ perror 30 OS error code 30: Read-only file system zj@bogon:/usr/local/mysql/bin$ perror 60 OS error code 60: Device not a stream zj@bogon:/usr/local/mysql/bin$ perror 30 60 OS error code 30: Read-only file system OS error code 60: Device not a stream