今日はなにの日。

気になったこと勉強になったことのメモ。

今日は、俺的MySQLチートシートの日。

目次

とある日

MySQLのあれこれメモです。

インストール編

MySQL :: Download MySQL Yum Repository

MySQL :: MySQL 8.0 Reference Manual :: 2 Installing and Upgrading MySQL

インストール

MySQL :: Download MySQL Yum Repository

sudo rpm -Uvh mysql80-community-release-el7-6.noarch.rpm

バージョン指定インストール

MySQL :: MySQL Community Serverのダウンロード(アーカイブバージョン)

wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.14-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-8.0.14-1.el7.x86_64.rpm-bundle.tar
yum install mysql-community-server
mysql --version

リリースシリーズ指定インストール

5系インストールする場合

yum repolist all | grep mysql
sudo yum-config-manager --disable mysql80-community
sudo yum-config-manager --enable mysql57-community
yum repolist enabled | grep mysql
sudo yum module disable mysql
sudo yum install mysql-community-server

運用編

showコマンド

プラグイン確認

show variables like 'default_authentication_plugin';

データベース一覧

show databases;

テーブル一覧

show tables;

テーブルスキーマ確認

show create table table_name;

権限確認

show grants for 'test'@'localhost';

プロセス確認

show full processlist;

ユーザ

作成

create user 'test'@'localhost' identified WITH mysql_native_password BY 'password'

ユーザ一覧確認

select user, host, plugin from mysql.user;

文字コード

SHOW CHARACTER SET;

ランダムデータ

TIMESTAMP

SELECT NOW();
SELECT CURRENT_TIMESTAMP();
SELECT CURRENT_TIMESTAMP;

(root@localhost) [test] 8.0.29 > select FROM_UNIXTIME(UNIX_TIMESTAMP(now()) + RAND());
+-----------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP(now()) + RAND()) |
+-----------------------------------------------+
| 2022-05-18 07:11:39.975426                    |
+-----------------------------------------------+
1 row in set (0.00 sec)

テーブル

テーブル容量

現在のデータベースのテーブル一覧

SELECT table_name, 
       engine AS DBエンジン, 
       table_rows AS 行数,
       avg_row_length AS 平均レコード長,
       floor((data_length+index_length) / 1024 / 1024) AS ALL_MB,
       floor(data_length / 1024 / 1024) AS DATA_MB,
       floor(index_length / 1024 / 1024) AS INDEX_MB
FROM information_schema.tables
WHERE table_schema = database()
ORDER BY (data_length + index_length) DESC;

特定のテーブル

SELECT table_name, 
       engine AS DBエンジン, 
       table_rows AS 行数,
       avg_row_length AS 平均レコード長,
       floor((data_length+index_length) / 1024 / 1024) AS ALL_MB,
       floor(data_length / 1024 / 1024) AS DATA_MB,
       floor(index_length / 1024 / 1024) AS INDEX_MB
FROM information_schema.tables
WHERE table_name = "table_name"
ORDER BY (data_length + index_length) DESC;

すぐ使うよう

SELECT
    table_name,
    ENGINE,
    table_rows,
    avg_row_length,
    floor((data_length + index_length) / 1024 / 1024) AS ALL_MB,
    floor(data_length / 1024 / 1024) AS DATA_MB,
    floor(index_length / 1024 / 1024) AS INDEX_MB
FROM
    information_schema.tables
ORDER BY
    (data_length + index_length) DESC
LIMIT
    10;

データベース

DB容量

SELECT table_schema, 
       floor(SUM(data_length + index_length) / 1024 / 1024) AS ALL_MB,
       floor(SUM((data_length) / 1024 / 1024)) AS DATA_MB,
       floor(SUM((index_length) / 1024 / 1024)) AS INDEX_MB
FROM information_schema.tables
WHERE table_schema = 'database_name'
GROUP BY table_schema
ORDER BY sum(data_length + index_length) DESC;

接続

use database_name;

環境変数

オートコミット

select @@autocommit;

バックアップとリストア編

バックアップ

定義とデータのダンプ

# データベース
mysqldump -u root -p database_name > dump.sql

#テーブル
mysqldump -u root -p database_name TABLE_NAME > dump.sql

定義のみダンプ

#データベースとテーブル定義をダンプ
mysqldump -u root -p database_name -d > dump.sql

#データベースの定義のみダンプ
mysqldump -u root -p  database_name -d -t > dump.sql

#テーブルの定義のみダンプ
mysqldump -u root -p  database_name -d -n > dump.sql

データのみのダンプ

#データベースのデータ
mysqldump -u root -p  -t database_name > dump.sql

#テーブルのデータ
mysqldump -u root -p  -t database_name TABLE_NAME > dump.sql

リストア

# データベースへリストア
mysql -u root -p database_name < dump.sql

適宜更新予定です。

参考記事

MySQLチートシート - Qiita

MySQL8でバージョンを指定してインストールする | BITTER GOURD

MySQL基礎コマンド チートシート(随時更新) – 0から始めるインフラ日誌 – 30代インフラエンジニアがWebインフラ中心に備忘録を書き溜めていきます

MySQL ::MySQLYumリポジトリを使用するためのクイックガイド

MySQL|DB容量、テーブル容量の確認方法 - わくわくBank

MySQLのデータベースをmysqldumpでバックアップ/復元する方法 |

mysqldumpまとめ - Qiita

第65回 MySQLと文字コード:MySQL道普請便り|gihyo.jp … 技術評論社

現在の日付・時刻を取得する - MySQL 逆引きリファレンス