17_MySQLにはツールが付属しています

MySQLデータベースは、データベースのサーバー側アプリケーションを提供するだけでなく、mysql、mysqladmin、mysqldumpなどの多数のクライアントツールも提供します。

1つはmysqlコマンドです

Mysqlコマンドは最もよく使用されるコマンドツールであり、MySQLサーバーを操作および管理するためのコマンドラインインターフェイスをユーザーに提供します。構文形式:

Usage: mysql [OPTIONS] [database] 

// mysqlツールのヘルプを取得する

# mysql --help

1. mysql-eパラメーター

このパラメータは

mysql、mysql接続を介してMySQL Serverにログインする代わりに、「-e」の後に特定のコマンドを実行したい。このパラメータは、いくつかの基本的なMySQL検査および監視スクリプトを作成するのに非常に役立ちます。MySQLを操作および保守するときにスクリプトでよく使用されます。

構文形式:

#mysql  -hhostname -Pport -uusername -ppassword  -e  相关mysql的sql语句

Liezi 1:すべてのデータベースを表示

[root@mysqld01 ~]# mysql -uroot -p -e "show databases"
Enter password: 
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| mytest             |
| performance_schema |
| sys                |
+--------------------+

例2:スクリプトを使用したデータベースの追加、削除、変更、およびクエリ

[root@mysqld01 ~]# cat mysql.sh 
#!/bin/bash
HOSTNAME="localhost"
PORT="3306"
USERNAME="root"
PASSWORD="123.com"

DBNAME="test1"
TABLENAME="t1"

#创建库
create_db="create database if not exists ${DBNAME}"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} -e "${create_db}" 2>/dev/null
echo "create databases"

#创建表

create_table="create table if not exists  ${TABLENAME} (id int,name char(22))"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${create_table}" 2>/dev/null
echo "create table"

#检查表是否存在
desc_table="desc ${TABLENAME}"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${desc_table}" 2>/dev/null

#插入数据
insert_table="insert into ${TABLENAME} values (1,'zhangsan'),(2,'lisi')"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${insert_table}"  2>/dev/null

#查看数据
select_tble="select * from ${TABLENAME}"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_tble}" 2>/dev/null

#update 数据

update="update ${TABLENAME} set name='qin' where id = 1 "
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${update}" 2>/dev/null

#查看数据
select_tble="select * from ${TABLENAME}"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_tble}" 2>/dev/null

#删除数据
delete="delete from ${TABLENAME}"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${delete}" 2>/dev/null

2. mysql-Eパラメーター

接続時に「-E、-vertical」パラメータを使用すると、ログイン後のすべてのクエリ結果が列に表示され、クエリ後に「\ G」で終了した場合と同じ効果が得られます。

例:

[root@mysqld01 ~]# mysql -uroot -p123.com -E -e "select * from mysql.user"
mysql: [Warning] Using a password on the command line interface can be insecure.
*************************** 1. row ***************************
                  Host: localhost
                  User: root
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: Y
          Process_priv: Y
........省略

3.mysql -H "–htm"および-X "-xml"パラメーター

これらの2つのパラメータを有効にすると、選択したすべての結果が「Html」および「Xml」の形式で出力されます。一部のレポートファイルをXmlまたはHtmlファイル形式でエクスポートする場合など、状況によっては非常に便利です。 。

例1:mysql.userテーブルをhtml形式で出力します

~]# mysql -uroot -p123.com -H -e "select * from mysql.user" > user.html
[root@mysqld01 ~]# cat user.html 
<TABLE BORDER=1><TR><TH>Host</TH><TH>User</TH><TH>Select_priv</TH><TH>Insert_priv</TH><TH>Update_priv</TH><TH>Delete_priv</TH><TH>Create_priv</TH><TH>Drop_priv</TH><TH>Reload_priv</TH><TH>Shutdown_priv</TH>
........省略

例2:mysql.userテーブルをxml形式で出力します

[root@mysqld01 ~]# mysql -uroot -p123.com -X -e "select * from mysql.user" > user.xml
[root@mysqld01 ~]# cat user.xml 
<?xml version="1.0"?>

<resultset statement="select * from mysql.user
" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <row>
	<field name="Host">localhost</field>
.....省略

4. --prompt = nameパラメーター(重要)

「--prompt = name」パラメータは、操作と保守を行う人にとって非常に重要なパラメータオプションです。その主な機能は、独自のmysqlプロンプトの表示内容をカスタマイズすることです。デフォルトでは、mysqlを介してデータベースにログインした後、mysqlプロンプトは他の追加情報のない非常に単純なコンテンツ「mysql>」になります。幸い、mysqlは、「-prompt = name」パラメーターを使用してプロンプト情報をカスタマイズする方法を提供します。このパラメーターは、ログインホストアドレス、ログインユーザー名、現在の時刻、現在のデータベーススキーマ、MySQLServerの一部の情報を表示するように構成できます。など。

推奨されるプロンプト定義:

"\\u@\\h : \\d \\r:\\m:\\s> "

プロンプトの説明:\ uはユーザー名、\ hはホスト名、\ dは現在のデータベース、\ r時間(12時間形式)、\ m分、\ s秒、\ R現在の時刻(24時間制) (0–23)

例1:

[root@mysqld01 ~]# mysql -uroot -p123.com --prompt="\\u@\\h:\\d \\r:\\m:\\s >"

表示後

root@localhost:(none) 07:00:20 >use mytest;
Database changed
root@localhost:mytest 07:01:14 >

例2:

–promptパラメーターを/etc/my.cnf構成ファイルに書き込むと、永続的に有効になります。これにより、mysqlを入力するたびに–promptパラメーターを入力する問題が解決されます。

[root@mysqld01 ~]# cat /etc/my.cnf 
[mysqld]
......省略
[client]
prompt="\\u@\\h:\\d \\r:\\m:\\s >"

[root@mysqld01 ~]# systemctl restart mysqld

5. --tee = nameパラメーター

「-tee = name」パラメータは、すべての入力および出力コンテンツをファイルに記録するようにmysqlに指示するために使用される、運用および保守担当者にとって非常に便利なパラメータオプションでもあります。メンテナンスを大幅に変更する場合、検査を容易にするために、操作プロセス全体のすべての入力および出力コンテンツを保存するのが最善です。mysqlコマンドライン状態で多数の対話型操作を実行する場合、これらの操作は実際に監査のためにログに記録できます。これは非常に単純ですmysql -u root -p --tee = / path / xxxx.log

例1:

[root@mysqld01 ~]# mysql -uroot -p123.com --tee=mysql.log
mysql: [Warning] Using a password on the command line interface can be insecure.
Logging to file 'mysql.log'
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.32 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root@localhost:(none) 07:12:11 >show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| TEST               |
| mysql              |
| mytest             |
| performance_schema |
| sys                |
| test1              |
+--------------------+
7 rows in set (0.00 sec)

root@localhost:(none) 07:12:16 >exit
Bye

//もちろん、現在のディレクトリはこの時点でmysql.logファイルを生成します。内部のコンテンツは、データベース内の操作のコンテンツです。

注:-teeパラメーターはファイルを追加するためのものです!

[root@mysqld01 ~]# cat mysql.log 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.32 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

root@localhost:(none) 07:12:11 >show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| TEST               |
| mysql              |
| mytest             |
| performance_schema |
| sys                |
| test1              |
+--------------------+
7 rows in set (0.00 sec)

root@localhost:(none) 07:12:16 >exit

2、mysqladminコマンド

名前が示すように、提供される関数はMySQL管理に関連するさまざまな関数です。MySQL Serverのステータスチェック、さまざまな統計のフラッシュ、データベースの作成/削除、MySQLServerのシャットダウンなど。mysqladminが実行できるほとんどのことはmysql接続を介してMySQLServerにログインした後に実行できますが、ほとんどの操作はmysqladminを介して完了する方が簡単で便利です。ここでは、よく使われる一般的に使われる機能をいくつか紹介します。

注:mysqladminコマンドはプロンプトでは使用できません。

1.pingパラメータ

pingコマンドは、MySQLServerが引き続き正常にサービスを提供できるかどうかを簡単に検出できます。mysqlローカルマシンでテストします。

[root@mysqld01 ~]# mysqladmin -uroot -p123.com ping
mysqld is alive

2.ステータスパラメータ

statusコマンドは、現在のMySQLサーバーのいくつかの基本的なステータス値を取得できます

[root@mysqld01 ~]# mysqladmin -uroot -p status
Enter password: 
Uptime: 335  Threads: 1  Questions: 11  Slow queries: 0  Opens: 108  Flush tables: 1  Open tables: 101  Queries per second avg: 0.032

稼働時間:mysqlサーバーが実行されている秒数です。

スレッド:アクティブなスレッドの数は、開いているセッションの数です。

質問:サーバーが起動してからの顧客の質問(クエリ)の数(mysqlと対話している限り、テーブルをクエリするかサーバーのステータスをクエリするかに関係なく、1回記録されます)

遅いクエリ:遅いクエリの数です。

開く:mysqlが開いたデータベーステーブルの数

フラッシュテーブル:mysqlが実行したフラッシュテーブル、リフレッシュ、およびリロードコマンドの数。注:テーブルのフラッシュ//テーブルの更新(キャッシュのクリア)リロード承認テーブルのリロード更新すべてのテーブルのウォッシュとログファイルのクローズとオープン

open:サーバーの起動から開始してデータベースを開くテーブルの数。

1秒あたりのクエリ平均:selectステートメントの平均クエリ時間使用中のメモリ割り当てられたメモリ(MySQLが-withdebugでコンパイルされた場合にのみ使用可能)最大メモリ使用された最大メモリ割り当て(MySQLが-with-debugでコンパイルされた場合にのみ使用可能)

3.プロセスリストパラメータ

processlistパラメーターは、現在のデータベースの接続スレッド情報を取得します

[root@mysqld01 ~]# mysqladmin -uroot -p processlist
Enter password: 
+----+------+-----------+----+---------+------+----------+------------------+
| Id | User | Host      | db | Command | Time | State    | Info             |
+----+------+-----------+----+---------+------+----------+------------------+
| 9  | root | localhost |    | Query   | 0    | starting | show processlist |
+----+------+-----------+----+---------+------+----------+------------------+

4.パラメータを強制終了します

processlistパラメーターによって検出されたIDは、killコマンドで強制終了できます。

[root@mysqld01 ~]# mysqladmin -uroot -p processlist
Enter password: 
+----+------+-----------+----+---------+------+----------+------------------+
| Id | User | Host      | db | Command | Time | State    | Info             |
+----+------+-----------+----+---------+------+----------+------------------+
| 11 | root | localhost |    | Sleep   | 7    |          |                  |
| 12 | root | localhost |    | Query   | 0    | starting | show processlist |
+----+------+-----------+----+---------+------+----------+------------------+
[root@mysqld01 ~]# mysqladmin -uroot -p kill 11
Enter password: 
[root@mysqld01 ~]# mysqladmin -uroot -p processlist
Enter password: 
+----+------+-----------+----+---------+------+----------+------------------+
| Id | User | Host      | db | Command | Time | State    | Info             |
+----+------+-----------+----+---------+------+----------+------------------+
| 14 | root | localhost |    | Query   | 0    | starting | show processlist |
+----+------+-----------+----+---------+------+----------+------------------+

上記のパラメータを使用して、いくつかの簡単なスクリプトを記述します


#获取mysql当前状态值
mysqladmin -uroot -p123.com -h localhost status

#获取数据库当前连接信息
mysqladmin -uroot -p123.com -h localhost processlist

#获取数据库当前的连接数
mysql -uroot -p123.com -BNe "select host,count(host) from processlist group by host" information_schema

#显示mysql的启动时长
mysql -uroot -p123.com -e "SHOW STATUS LIKE '%uptime%'" | awk '/ptime/{ calc = $NF/3600;print $(NF-1), calc"Hour"}'

#查看数据库所有库大小
mysql -uroot -p123.com -e 'select table_schema,round(sum(data_length+index_length)/1024/1024,4) from information_schema.tables group by table_schema '

3つ、mysqldumpとmysqlbinlog

  1. mysqldump:このツールの機能は、MySQLサーバーのデータをデータベースからSQLステートメントの形式でテキストファイルにダンプすることです。mysqldumpはMySQLの論理バックアップツールです

  2. mysqlbinlog: mysqlbinlogプログラムの主な機能は、MySQLサーバーによって生成されたバイナリログ(つまり、binlog)を分析することです。mysqlbinlogを使用して、指定された期間の内容、またはbinlog内の指定されたログの開始位置と終了位置を解析し、それらをSQLステートメントに解析できます。

4、mysqlslapパフォーマンステスト

MysqlslapパフォーマンステストMySQLの2つのストレージエンジンmysqlslapは、mysqlに付属するベンチマークツールです。利点:クエリデータ、シンプルな構文、柔軟性、使いやすさ。このツールは、クエリの更新をサーバーに同時に送信する複数のクライアントをシミュレートできます。パフォーマンステストデータも提供され、さまざまなエンジンのパフォーマンス比較が提供されます。

mysqlslapは、mysqlのパフォーマンス最適化の前後の検証の直感的な基盤を提供します。オンラインデータベースでサポートされているユーザートラフィックの上限とそのプレッシャーを正確に把握するために、システムの運用と保守、およびDBAの担当者がいくつかの一般的なストレステストツールを習得することをお勧めします。抵抗。次に、このストレステストツールmysqlslapを見てください。詳細については、オプションのマニュアルと--helpで説明されています。一般的に使用されるオプションは次のとおりです。

-同時実行性は同時実行の数を表し、複数はコンマで区切ることができます。次に例を示します。concurrency= 50,100,200 --enginesはテスト対象のエンジンを表し、区切り文字で区切られた複数のエンジンが存在する場合があります。

-反復は、これらのテストを実行する回数、つまり、何回実行した後に結果が得られるかを表します。

--Auto-generate-sqlは、システムによって生成されたSQLスクリプトを使用してテストすることを意味します。

--Auto-generate-sql-load-typeは、テストが読み取りまたは書き込みであるか、2つの混合(読み取り、書き込み、更新、混合)であるかを表します。

--Number-of-queriesは、実行されるクエリの総数を表します。各クライアントによって実行されるクエリの数は、クエリ/同時実行の総数によって計算できます。たとえば、最後から2番目の結果は2 = 200/100です。

–debug-infoは、CPUとメモリに関する追加情報を出力する必要があることを意味します(注:MySQLが–with-debugでコンパイルされている場合にのみ使用可能です)。

--Number-int-colsは、テストテーブル内のINTEGERタイプの属性の数を表します。

--Number-char-colsは、テストテーブルのchar型フィールドの数を表します。

--Create-schemaは、自分で定義したスキーマを表します(MySQLでは、ライブラリはテストを作成するためのデータベースです)。

-クエリは独自のSQLスクリプトを表します。

--Only-print SQLステートメントが何であるかを確認するために印刷するだけの場合は、このオプションを使用できます。

--Csv = nameCSV形式のデータファイルを作成します

注:バージョンごとに、デフォルトの最大接続数に違いはありません。一般的な実稼働環境では不十分です。my.cnf[mysqld]の下にmax_connections = 1024を追加して1024に増やし、Mysqlを再起動します。my.cnfファイルを変更し、mysqldサービスを再起動して、変更された最大接続数を表示します

次のように、Mysqlがデフォルトでストレージエンジンを使用していることを確認します。mysql> show engine;

例1:

[root@mysqld01 ~]# mysqlslap --defaults-file=/etc/my.cnf --concurrency=100,200 \
--iterations=1 --number-int-cols=20 --number-char-cols=30 \
-auto-generate-sql --auto-generate-sql-add-autoincrement \
--auto-generate-sql-load-type=mixed --engine=myisam,innodb \
--number-of-queries=2000 -uroot -p123.com --verbose 

結果を示す:

Benchmark
	Running for engine myisam
	Average number of seconds to run all queries: 0.299 seconds
	Minimum number of seconds to run all queries: 0.299 seconds
	Maximum number of seconds to run all queries: 0.299 seconds
	Number of clients running queries: 100
	Average number of queries per client: 20

Benchmark
	Running for engine myisam
	Average number of seconds to run all queries: 0.361 seconds
	Minimum number of seconds to run all queries: 0.361 seconds
	Maximum number of seconds to run all queries: 0.361 seconds
	Number of clients running queries: 200
	Average number of queries per client: 10

Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 0.477 seconds
	Minimum number of seconds to run all queries: 0.477 seconds
	Maximum number of seconds to run all queries: 0.477 seconds
	Number of clients running queries: 100
	Average number of queries per client: 20

Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 0.476 seconds
	Minimum number of seconds to run all queries: 0.476 seconds
	Maximum number of seconds to run all queries: 0.476 seconds
	Number of clients running queries: 200
	Average number of queries per client: 10

テストの説明:2つの読み取りと書き込みの同時テストをシミュレートします。1回目は100、2回目は200、SQLスクリプトが自動的に生成され、テストテーブルには20個のinitフィールドと30個のcharフィールドが含まれ、毎回2000個のクエリ要求が実行されます。 。テストエンジンはmyisamとinnodbです。

テスト結果の説明:Myisamエンジンは、最初の100クライアントに0.299 / sを使用して同時に追加の調査を開始し、次の200クライアントに0.361 / sを使用して同時に追加の調査を開始します。

Innodbエンジンは、最初の100クライアントに0.477を使用して同時に追加の調査を開始し、次の200クライアントに0.476 / sを使用して同時に追加の調査を開始します。MyISAMストレージエンジンの処理パフォーマンスがわかります。が最良で最も一般的に使用されていますが、サポートされていません。InonDBストレージエンジンは、トランザクションエンジンで最も使用されているトランザクションデータエンジン(ACID)を提供します。トランザクションのロールバックやシステムの修復などの機能があります。

例2:

MysqlslapテストツールはCSV形式のデータファイルを生成し、それらをグラフ形式に変換します

[root@mysqld01 ~]# mysqlslap --defaults-file=/etc/my.cnf --concurrency=100,200 \
--iterations=1 --number-int-cols=20 --number-char-cols=30 -auto-generate-sql \
--auto-generate-sql-add-autoincrement --auto-generate-sql-load-type=mixed \
--engine=myisam,innodb  --number-of-queries=2000 -uroot -p123.com --verbose \
--csv=/root/a.csv

a.csvをWindowsホストにコピーし、開いてグラフを生成します

例3:

独自に定義したSQLスクリプトまたはステートメントを使用してテストします。ここでは、次のようにスクリプトの内容を完成させるためのテーブルを生成するスクリプトを記述します。

[root@mysqld01 sh]# cat mysql.sh 
#!/bin/bash
HOSTNAME="localhost"
PORT="3306"
USERNAME="root"
PASSWORD="123.com"
DBNAME="test1"
TABLENAME="tb1"
#create database
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} -e "drop database if exists ${DBNAME}"
create_db_sql="create database if not exists ${DBNAME}"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} -e "${create_db_sql}"
#create table
create_table_sql="create table if not exists ${TABLENAME}(stuid int not null primary key,stuname varchar(20) not null,stusex char(1) not null,cardid varchar(20) not null,birthday datetime,entertime datetime,address varchar(100) default null)"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${create_table_sql}"
#insert data to table
i=1
while [ $i -le 20000 ]
do 
insert_sql="insert into ${TABLENAME} values ($i,'zhangsan','1','1234567890123456','1999-10-10','2016-9-3','zhongguo beijingshichangpinqu')"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${insert_sql}"
let i++
done
#select data
select_sql="select count(*) from ${TABLENAME}"
mysql -h ${HOSTNAME} -P ${PORT} -u ${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"
[root@mysqld01 sh]# sh mysql.sh

//テスト用にmysqlslapツールを実行します

[root@mysqld01 sh]# mysqlslap --defaults-file=/etc/my.cnf --concurrency=10,20 \
--iterations=1 --create-schema='test1' \
--query='select * from test1.tb1' --engine=myisam,innodb --number-of-queries=2000 \
-uroot -p123.com –verbose

//テスト結果は次のとおりです。

Benchmark
	Running for engine myisam
	Average number of seconds to run all queries: 37.563 seconds
	Minimum number of seconds to run all queries: 37.563 seconds
	Maximum number of seconds to run all queries: 37.563 seconds
	Number of clients running queries: 10
	Average number of queries per client: 200

Benchmark
	Running for engine myisam
	Average number of seconds to run all queries: 36.475 seconds
	Minimum number of seconds to run all queries: 36.475 seconds
	Maximum number of seconds to run all queries: 36.475 seconds
	Number of clients running queries: 20
	Average number of queries per client: 100

Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 37.788 seconds
	Minimum number of seconds to run all queries: 37.788 seconds
	Maximum number of seconds to run all queries: 37.788 seconds
	Number of clients running queries: 10
	Average number of queries per client: 200

Benchmark
	Running for engine innodb
	Average number of seconds to run all queries: 35.693 seconds
	Minimum number of seconds to run all queries: 35.693 seconds
	Maximum number of seconds to run all queries: 35.693 seconds
	Number of clients running queries: 20
	Average number of queries per client: 100

注:mysqlslapツールを使用してmysqlサーバーでストレステストを実行します.–concurrency、–number-of-queriesなどのオプションの値を介して各テストの結果を表示し、の最大同時実行性を取得できます繰り返しのテストと最適化によるmysqlサーバー。mysqlslapツールの出力結果がセグメンテーション違反(コアダンプ)の場合、基本的にはmysqlサーバーの負荷を超えていることを意味します。

おすすめ

転載: blog.csdn.net/weixin_45310323/article/details/112517146
おすすめ