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

データ操作

# テーブルを複製して新しいテーブルを作成する
create table new_table like src_table;

# データも含めたテーブルを複製して新しいテーブルを作成する
create table new_table select * from src_table;

# Selectした結果をInsertする
insert into to_table * from from_table;

存在確認

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;

# カラム削除
alter table drop column column_name

# trigger削除
drop trigger trigger_name

レプリケーション関連

マスタ情報の更新

CHANGE MASTER TO MASTER_HOST='192.168.0.2',
MASTER_USER='repl_user',
MASTER_PASSWORD='repl_password',
MASTER_LOG_FILE='master-bin.000355',
MASTER_LOG_POS=2318600;

エラーのskip

# エラーが出た時にskipする
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
start slave;

パスワードを忘れた場合

# 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