以下是一些常用的MySQL程序:
程序名 | 作? |
mysqld | MySQL的守護進程即 MySQL 服務器,要使?MySQL 服務器 mysqld必須正在運?狀態 |
mysql | MySQL客?端程序,?于交互式輸? SQL 語句或以批處理模式從?件執?SQL的命令??具 |
mysqlcheck | ?于檢查、修復、分析和優化表的表維護客?端 |
mysqldump | 將 MySQL 數據庫轉儲到 SQL、?本或 XML ?件中的客?端 |
mysqlimport | 將?本?件導?到表的客?端?具 |
mysqladmin | 執?管理操作的客?端,例如創建或刪除數據庫、重新加載授權表、將表刷新到磁盤以及重新打開?志?件。mysqladmin還可以?于從服務器檢索版本、進程和狀態信息。 |
mysqlshow | 顯?數據庫、表、列和索引信息的客?端 |
mysqldumpslow | ?于讀取和匯總慢速查詢?志內容的實?程序 |
mysqlbinlog | 從?進制?志中讀取SQL語句的實?程序。mysqlbinlog ?件中包含的已執?SQL語句的?志,可?于從崩潰中恢復數據。 |
mysqlslap | 客?端負載?具,模擬多個客?端同時訪問MySQL服務器,并報告每個階段的使?時間。 |
mysqld - MySQL 服務器

mysql - MySQL 命令行客戶端
# ?選項格式
mysql --user=user_name --password [db_name]
# 短選項格式
mysql -uuser_name -p [db_name]
# 終端回顯,輸?密碼
Enter password: your_password
mysql 客戶端選項
選項--?格式 | 短格式 | 說明 |
--host | -h | --host= host_name , -h host_name 連接到指定主機上的 MySQL 服務 |
--port | -P | --port=port_num , -Pport_num TCP/IP 連接使?的端?號 |
--user | -u | --user= user_name , -u user_name ?于連接到MySQL 服務器的?戶名 |
--password | -p | --password[= password ] , -p[ password ] ?于連接到MySQL 服務器的密碼。可選,如果沒有給出, 會提??戶輸? |
--defaults-file | --defaults-file= file_name 使?指定的選項?件。如果該?件不存在,則會發?錯誤。 | |
--default-character-set | --default-character-set= charset_name charset_name 將作為 客?端和當前連接的默認字符集,例: utf8mb4 | |
--database | -D | --database= db_name , -D db_name 要使?的數據庫 |
--compress | -C | --compress , -C 如果可能,壓縮客?端和服務器之間傳輸的所有信息 |
--reconnect | --reconnect 如果客?端與服務器的連接丟失,?動嘗試重新連接 | |
--quick | -q | --quick , -q 不緩存查詢結果,收到??打印??,如果輸出被掛起,可能會降低服務器速度 |
--protocol | --protocol={TCP|SOCKET|PIPE|MEMORY} ?于連接到服務器的傳輸協議, 默認為TCP | |
--delimiter | --delimiter= 要設置的 SQL語句分隔符 設置SQL語句分隔符。默認值為分號 ( ; ) | |
--execute | -e | --execute= statement , -e statement 執?指定的SQL語句并退出。 |
--version | -V | --version , -V 顯?版本信息并退出。 |
--help | -? | --help , -? 顯?幫助信息并退出。 |
在命令行中使用選項
- 選項應在程序名之后給出
- 選項以單破折號" - "或雙破折號" -- "號開頭, - 表?短格式, -- 表??格式,例如:-?和 --help 都表?MySQL 程序顯?他的幫助消息
- 選項名稱區分??寫。 -v 和 -V 都是合法的,但含義不同,它們分別是 --verbose 和 --version 選項的相應縮寫形式
- 對于帶值的?格式選項,通常? = 符號分隔選項名稱和值。對于帶值的短選項,選項值可以緊跟在選項之后,也可以?空格隔開,例如: --host=127.0.0.1 、 -h127.0.0.1 和 -h 127.0.0.1 是等價的。 但是對于密碼選項的短格式,如果要指定密碼,選項與值之間不能有空格,如下所?:
mysql -ptest # test表?密碼,但沒有指定要訪問的數據庫
mysql -p test # test 表?指定了訪問的數據庫,但沒有指定密碼
- 對于采?數值的選項,該值可以帶有后綴 K , M 或 G 以指?乘數 1024、1024^2或 1024^3,例如,以下命令告訴 mysqladmin對服務器執? 1024 次 ping,每次 ping 之間休眠 3 秒
mysqladmin --count=1K --sleep=3 ping -uroot -p
- 在命令?中包含空格的選項值必須?引號引起來。例如, --execute (or -e ) 選項與mysql?起使?時,表?將?個或多個 SQL 語句發送給服務器執?并顯?結果
mysql -u root -p -e "SELECT VERSION();SELECT NOW();"
選項(配置)文件
使用?法
# Linux
mysql --defaults-file=/etc/mysql/my.cnf -uroot -p
# windows下
mysql "--defaults-file=C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" -uroot -p
選項?件位置及加載順序
- 在 Windows 系統讀取選項?件
?件名 | 說明 |
%WINDIR%\my.ini , %WINDIR%\my.cnf | 全局,%WINDIR%是一個環境變量,它代表Windows操作系統的安裝目錄,通常等于C:\Windows |
C:\my.ini , C:\my.cnf | 全局 |
BASEDIR \my.ini , BASEDIR \my.cnf | 全局,其中 BASEDIR指mysql的安裝路徑,這是最常用的配置文件 |
defaults-extra-file | 如果存在其他選項?件可以通過 --defaults-extra-file 選項指定 |
%APPDATA%\MySQL\.mylogin.cnf | 登錄路徑選項(僅限客?端),%APPDATA% 表?應?程序數據的?錄,如C:\Users\[用戶名]\AppData\Roaming |
DATADIR \mysqld-auto.cnf | 系統變量 (僅限服務器) |
- 在 Unix 和 Linux 系統上讀取的選項?件
?件名 | 說明 |
/etc/my.cnf | 全局 |
/etc/mysql/my.cnf | 全局 |
$MYSQL_HOME/my.cnf | 服務器特定選項(僅限服務器),MYSQL_HOME 是設置的環境變量路徑 |
defaults-extra-file | 如果存在其他選項?件可以通過 --defaults-extra-file 選項指定 |
~/.my.cnf | ??特定選項,MYSQL_HOME 是設置的環境變量路徑 |
~/.mylogin.cnf | ??特定的登錄路徑選項(僅限客?端) |
DATADIR /mysqld-auto.cnf | 系統變量 (僅限服務器),D ATADIR 代表MySQL數據?錄 |
- 在Linux下編輯全局配置?件默認位置 /etc/mysql/my.cnf ,初始內容如下:
root@hcss-ecs-9734:/# vim etc/mysql/my.cnf# Copyright (c) 2015, 2024, Oracle and/or its affiliates.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
# ... 省略
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
# 以下區域可以根據需要進?配置
- 在已有內容下?輸?相應的配置,我們要為客?端設置全局的編碼格式為utf8mb4, 那么在[client] 節點下指定相應的選項即可
[client] # 所有客?端程序者會讀取這個節點下的配置信息
default-character-set=utf8mb4 # 指定編碼格式為utf8mb4
從.sql?件執? SQL 語句
使?source命令導?
mysql> help# ... 省略
source (\.) Execute an SQL script file. Takes a file name as an argument.
# ... 省略
- 準備要執?的.sql?件,名為test_db.sql,內容如下:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
DROP DATABASE IF EXISTS `test_db`;
CREATE DATABASE `test_db` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `test_db`;
-- ----------------------------
-- Table structure for classes
-- ----------------------------
DROP TABLE IF EXISTS `classes`;
CREATE TABLE `classes` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL
DEFAULT NULL,`desc` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL
DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE =
utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of classes
-- ----------------------------
INSERT INTO `classes` VALUES (1, '計算機系2019級1班', '學習了計算機原理、C和Java語
?、數據結構和算法');
INSERT INTO `classes` VALUES (2, '中?系2019級3班', '學習了中國傳統?學');
INSERT INTO `classes` VALUES (3, '?動化2019級5班', '學習了機械?動化');
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL
DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE =
utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, 'Java');
INSERT INTO `course` VALUES (2, '中國傳統?化');
INSERT INTO `course` VALUES (3, '計算機原理');
INSERT INTO `course` VALUES (4, '語?');
INSERT INTO `course` VALUES (5, '?階數學');
INSERT INTO `course` VALUES (6, '英?');
-- ----------------------------
-- Table structure for score
-- ----------------------------
DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (`score` decimal(3, 1) NULL DEFAULT NULL,`student_id` int(11) NULL DEFAULT NULL,`course_id` int(11) NULL DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of score
-- ----------------------------
INSERT INTO `score` VALUES (70.5, 1, 1);
INSERT INTO `score` VALUES (98.5, 1, 3);
INSERT INTO `score` VALUES (33.0, 1, 5);
INSERT INTO `score` VALUES (98.0, 1, 6);
INSERT INTO `score` VALUES (60.0, 2, 1);
INSERT INTO `score` VALUES (59.5, 2, 5);
INSERT INTO `score` VALUES (33.0, 3, 1);
INSERT INTO `score` VALUES (68.0, 3, 3);
INSERT INTO `score` VALUES (99.0, 3, 5);
INSERT INTO `score` VALUES (67.0, 4, 1);
INSERT INTO `score` VALUES (23.0, 4, 3);
INSERT INTO `score` VALUES (56.0, 4, 5);
INSERT INTO `score` VALUES (72.0, 4, 6);
INSERT INTO `score` VALUES (81.0, 5, 1);
INSERT INTO `score` VALUES (37.0, 5, 5);
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (`id` int(11) PRIMARY KEY AUTO_INCREMENT,`sn` int(11) NOT NULL COMMENT '學號',`name` varchar(20) NOT NULL COMMENT '姓名',`mail` varchar(20) COMMENT 'QQ郵箱'
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci
ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, 50001, '張三', 'zs@bit.com');
INSERT INTO `student` VALUES (2, 50002, '李四', 'ls@bit.com');
INSERT INTO `student` VALUES (3, 50003, '王五', 'ww@bit.com');
INSERT INTO `student` VALUES (4, 50004, '趙六', 'zl@bit.com');
INSERT INTO `student` VALUES (5, 50005, '錢七', 'qq@bit.com');
SET FOREIGN_KEY_CHECKS = 1;
- 確定.sql?件的絕對路徑:/home/lbk/test_db/database.sql
- 連接數據庫查看已有數據庫
- 使?source命令執?.sql?件的SQL語句
source /home/lbk/test_db/database.sql
- 查看數據庫并查詢數據,驗證導?是否成功
使?mysql客?端導?
直接使?mysql客?端程序導?.sql?件并執?相應的SQL語句,可以使?以下命令
mysql db_name < text_file # 在指定的數據庫下執?SQL,前提是數據庫必須提前建?好
mysql < text_file # 不指定數據庫.sql中必須有USE [database_name],來指定要操作的數據庫
mysqlcheck - 表維護程序
- 分析的作?是查看表的關鍵字分布,能夠讓 sql ?成正確的執?計劃(?持 InnoDB,MyISAM,NDB)
- 檢查的作?是檢查表的完整性以及數據庫表和索引是否損壞(?持 InnoDB,MyISAM, ARCHIVE,CSV)
- 優化的作?是回收空間、減少碎?、提?I/O(?持 InnoDB,MyISAM,ARCHIVE)
- 修復的作?是修復可能已經損壞的表(?持 MyISAM,ARCHIVE,CSV)
mysqlcheck [options] db_name [tbl_name ...]
mysqlcheck [options] --databases db_name ...
mysqlcheck [options] --all-databases
mysqlcheck有如下常?選項,可以在命令?中指定,也可以在選項?件中通過 [mysqlcheck] 和 [client] 組進?指定
選項 | 說明 |
--analyze,-a | 分析表 |
--auto-repair | 如果檢查的表有損壞,則?動修復它。所有表都檢查過之后才進?必要的修復 |
--check,-c | 檢查表中的錯誤。mysqlcheck的默認操作 |
--check-only-changed,-C | 僅檢查?上次檢查以來更改過的表 |
--databases,-B | --databases db_name 多個數據庫名?空格隔開,處理指定數據庫中的所有表 |
--force, -f | 即使發?SQL錯誤也要繼續 |
--optimize,-o | 優化表 |
--repair,-r | 執?可能進?的任務修復操作,除了唯?鍵 |
--skip-database | --skip-database= db_name 不需要執?檢查的數據庫名(區分??寫) |
--tables | --tables= table_name 多個表名?空格隔開 在選項之后的所有名稱參數都被視為表名。 |
--use-frm | 對于MyISAM表的修復操作 |
使用如下:
- 分析test_db數據庫
mysqlcheck -a test_db
- 檢查test_db數據庫
mysqlcheck -a test_db

- 修復test_db數據庫
mysqlcheck -r test_db

mysqldump - 數據庫備份程序
mysqldump [options] db_name [tbl_name ...] > 備份文件的路徑
mysqldump [options] --databases db_name ... > 備份文件的路徑
mysqldump [options] --all-databases > 備份文件的路徑
選項 | 說明 |
--add-drop-database | 在每個 CREATE DATABASE 語句之前添加 DROP DATABASE 語句 |
--add-drop-table | 在每個 CREATE TABLE 語句之前添加 DROP TABLE 語句 |
--add-drop-trigger | 在每個 CREATE TRIGGER 語句之前添加 DROP TRIGGER 語句 |
--add-locks | ? LOCK TABLES 和 UNLOCK TABLES 語句包裹每個表轉儲 |
--all-databases,-A | 轉儲所有數據庫中的所有表 |
--databases,-B | --databases= db_name 多個數據庫名?空格隔開,將參數解釋為數據庫名稱并轉儲所有的表 |
--comments,-i | 添加注釋到轉儲?件 |
--ignore-table | --ignore-table =db_name.table_name 多個表?空格隔開 不轉儲給定的表 |
--no-data,-d | 不轉儲表內容 |
--triggers | 轉儲每個表中的觸發器 |
--xml,-X | 以XML格式輸出 |
使用案例
mysqldump test_db > /root/dump.sql
然后我們就會有/root/dump.sql文件,其中包含了test_dp數據庫中所有的表及其數據,之后我們就可以在mysql中通過 source 命令執行/root/dump.sql文件,從而實現復制了test_dp數據庫。
mysqladmin - MySQL 服務器管理程序
mysqladmin [options] command [command-arg] [command [command-arg]] ...
選項 | 說明 |
version | 顯?來?服務器的版本信息 |
create db_name | 創建?個數據庫名為 db_name? |
drop db_name | 刪除名為 db_name 的數據庫及其所有表 |
extended-status | 顯?服務器狀態變量的值 |
password new_password | 設置新密碼,password 后可以省略新密碼,mysqladmin會在之后提?輸?新密碼 |
processlist | 顯?活動服務器線程的列表 |
kill id , id ,... | 終?服務器線程。如果給出了多個線程ID值,則列表中不能有空格。 |
shutdown | 停?服務器 |
mysqlshow - 顯?數據庫、表和列信息
mysqlshow 客?端可?于快速查看存在哪些數據庫、數據庫中的表以及表中的列或索引。mysqlshow 可以使?以下語法:
mysqlshow [options] [db_name [tbl_name [col_name]]]
- db_name tbl_name col_name 可以使?通配符 * ?或 _
- 如果沒有指定數據庫,則顯?所有數據庫名稱列表;如果沒有指定表,則顯?數據庫中所有匹配的表;如果沒有指定列,則顯?表中所有匹配的列和列類型。
- 輸出僅顯?當前權限可以訪問的數據庫、表或列的名稱。
使用如下:
mysqlshow test_db;
mysqldumpslow - 總結慢查詢?志?件
在平時使?MySQL數據庫時,經常進?查詢操作,有些查詢語句執?的時間?常?,當執?時間超過設定的閾值時,我們稱這個查詢為慢查詢,慢查詢的相關信息通常需要??志記錄下來稱為慢查詢?志,mysqldumpslow可以解析慢查詢?志?件并匯總其內容。
例如,我們可以使用mysqladmin查看當前有多少條慢查詢
mysqladmin status
我們可以看到當前一共有三條慢查詢,我們在mysql中可以用如下命令查看有關慢查詢的各種信息,例如設定的執行時間閾值,慢查詢日志文件是否開啟,及慢查詢日志文件的位置。
show variables like '%query%';
mysqldumpslow [options] [log_file ...]
[mysqld]
slow_query_log = 1
之后我們就可以使用如下命令查看慢查詢日志文件里的內容
mysqldumpslow /var/lib/mysql/hcss-ecs-9734-slow.log
mysqldumpslow 的常?選項
選項 | 說明 |
-a | 不? N 和 'S' 代替numbers和String |
-n N | 在名稱中包含N個以上的數字? N 代替 |
-g pattern | 僅考慮與指定模式匹配的慢查詢 |
-h host_name | 與*-slow.log?件名對應的MySQL服務器主機名,可以包含通配符。默認值是*(匹配所有)。 |
-i name | 服務器實例的名稱 |
-l | 不要從總時間中減去鎖占?的時間 |
-r | 倒序順列 |
-s sort_type | 如何對輸出進?排序 |
-t N | 顯?輸出中的前N個查詢 |
- t , at : 按查詢時間或平均查詢時間排序,默認排序
- l , al : 按鎖占?時間或平均鎖占?時間排序
- r , ar : 按發送的?數或平均發送的?數排序
- c : 按計數排序
mysqlbinlog - 處理?進制?志?件
- Linux下默認?錄:/var/lib/mysql
- Windows下默認?錄:MySQL程序的安裝路徑\Data

mysqlbinlog [options] log_file ...
mysqlbinlog binlog.000011
選項 | 說明 |
--offset, -o | --offset= N , -o N 跳過?志中的前N條記錄 |
--result-file, -r | --result-file= name , -r name 輸出的?標?件 |
--server-id | 僅顯?指定服務器ID創建的事件 |
mysqlslap - 負載仿真客?端
mysqlslap [options]
- 可以通過 --create 或 --query 選項,指定包含SQL語句的字符串或包含SQL語句的?件
- 如果指定?個包含SQL語句的?件,默認情況下每?必須包含?條語句(也就是說,隱式語句分隔符是換?符)
- 如果要把?條語句分為多?書寫,可以使? --delimiter 選項指定不同的分隔符
- 不能在?件中包含注釋,因為mysqlslap不能解析注釋。
選項 | 說明 |
--create | --create=value 其中value等于創建的SQL語句或.sql文件 |
--query , -q | --query=value 其中value等于創建的SQL語句或.sql文件 |
--concurrency, -c | --concurrency= N , -c N 要模擬并?客?端的數量 |
--no-drop | 運?完測試后不刪除創建的數據庫 |
--iterations , -i | --iterations= N , -i N 每個客?端運?測試的次數 |
--auto-generate-sql-add- autoincremen | 在?動?成的表中添加 AUTO_INCREMENT 列 |
--auto-generate-sql- write-number | --auto-generate-sql-write-number= N 要執?多少?插?,默認值是100 |
- 提供?定義的創建和查詢語句,創建50個客?端連接,每個客?端進?200次 select 查詢(在??內輸?命令)。
mysqlslap --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23);" --query="SELECT * FROM a" --concurrency=50 --iterations=200
- 從指定的?件中加載創建、插?和查詢SQL語句。SQL?件中的語句以 ";" 分隔。使?5個客?端,每個客?端查詢5次。
mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";