MySQL

in  

MySQLについて

SQL

データ操作

1
2
3
4
5
6
7
8
# テーブルを複製して新しいテーブルを作成する
create table new_table like src_table;

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

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

存在確認

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

https://teratail.com/questions/1281

データベース管理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# ユーザー作成
create user qa identified by 'L1g0x5DBJU';
# 権限付与
GRANT ALL PRIVILEGES ON `qa`.* TO 'qa'@'*';

# 権限再読み込み
FLUSH PRIVILEGES;

# テーブル調査
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

# Index追加
alter table access_log add index key_name(column_name)

# auto incrementの値確認
select table_name, auto_increment FROM information_schema.tables where auto_increment is not NULL

レプリケーション関連

マスタ情報の更新

1
2
3
4
5
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

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

binlogファイル操作

1
2
3
4
5
# binlog一覧表示
show binary logs;

# 2019-04-01 00:00:00より前のbinlogを消す
PURGE BINARY LOGS BEFORE '2019-04-01 00:00:00';

Replication

バージョン違いのReplication

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

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

Replication Filter

特定のDBのみをレプリケーション対象とする機能 オンラインで変更する場合は以下のコマンドにて行う

1
mysql> change replication filter replicate_do_db = (db1, db2)

設定ファイルには下記のように複数行で記載する

1
2
3
[mysqld]
replicate-do-db = db1
replicate-do-db = db2

パスワードを忘れた場合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15

# 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

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

mysqldump

対象データベースを指定してdump

1
mysqldump -u root -p --single-transaction --master-data=2 -B db1 db2

mysqladmin

MySQL管理用コマンド

サーバーの死活チェック

1
mysqladmin ping -uroot -p

mysql_config_editor

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

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

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

mysqldiff

http://kakakakakku.hatenablog.com/entry/2017/04/02/105901

install

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

1
2
3
tar xzf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5
sudo python setup.py install

use

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

Share