MySQL

Table of Contents

MySQL

mysqldiff

install

rpmとかだとamazon linuxだと依存を解消できなかった。

$ tar xzf mysql-utilities-1.6.5.tar.gz
$ cd mysql-utilities-1.6.5
$ sudo python setup.py install

use

$ mysqldiff --server1=user:password@host --server2=user:password@host --force --skip-table-options --changes-for=server1 schema:schema

mysqladmin

MySQL管理用コマンド

サーバーの死活チェック

$ mysqladmin ping -uroot -p

mysql_config_editor

難読化するだけだけど、shellにそのまま書いてあるよりかはまだまし。

$ mysql_config_editor set --login-path=local --host=localhost --user=root --password

http://gihyo.jp/dev/serial/01/mysql-road-construction-news/0057

SQL

存在確認

SELECT EXISTS(SELECT 1 FROM example_table WHERE ...)

https://teratail.com/questions/1281

データベース管理

# ユーザー作成
create user qa identified by 'L1g0x5DBJU';
# 権限付与
GRANT ALL PRIVILEGES ON `qa`.* TO 'qa'@'*';

# テーブル調査
show columns from access_log;

# カラム名で検索
use information_schema
select table_schema, table_name, column_name from columns where column_name like '%email%';

# ユーザー削除
drop user 'qa'@'localhost';

# 権限確認
show grants for 'qa'@'localhost';

# パスワード変更
set password for 'qa'@'localhost' = password('pass');

# パラメータ変更
set global max_connections=4096;

パスワードを忘れた場合

# MySQL止める
sudo /etc/init.d/mysqld stop

# セーフモードで起動
sudo mysqld_safe --skip-grant-tables &
mysql -uroot

# 再設定
use mysql
update user set password=PASSWORD("password") where User='root';

# 起動
sudo /etc/init.d/mysqld stop
sudo /etc/init.d/mysqld start

float 6桁の小数部をそのまま保存する

ibdataからのリストア

  1. MySQLを構築
  2. ログイン
  3. 復旧したいデータベース・テーブルのDDLを流す。
  4. テーブルへの変更をLOCK
  5. テーブルスペースを削除(ibdファイルを削除)
  6. 復旧したいibdファイルで上書きする
  7. テーブルスペースをインポート
  8. Lockを解除

https://dev.mysql.com/doc/mysql-enterprise-backup/3.11/ja/partial.restoring.single.html

バージョン違いのReplication

一つ下のバージョンをマスターとするサーバからのレプリケーションまでは対応している。 MySQL 5.6のマスターから MySQL5.7のスレーブへのレプリケーションはサポートしている。

https://dev.mysql.com/doc/mysql-replication-excerpt/5.7/en/replication-compatibility.html

Validate