Linux
mysql
Common †
mysql server backup †
command backup 1 †
backup script †
[root@centos ~]# vi mysql-backup.sh作成
#!/bin/bash
PATH=$PATH:/usr/local/sbin:/usr/bin:/bin
# バックアップ先ディレクトリ
BACKDIR=/backup/mysql
# MySQLrootパスワード
ROOTPASS=xxxxxxxx
# バックアップ先ディレクトリ再作成
rm -rf $BACKDIR
mkdir -p $BACKDIR
# データベース名取得
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`
# データベースごとにバックアップ
for dbname in $DBLIST
do
table_count=`mysql -u root -p $ROOTPASS -B -e "show tables" $dbname|wc -l`
[ $table_count -ne 0 ] &&
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done
[root@centos ~]# chmod 700 mysql-backup.sh
command backup restore 2 †
その他 †
csv ファイル出力 †
SELECT * FROM テーブル名 INTO OUTFILE "ファイル名" FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '囲み文字の指定';
グループしたカウントを条件に指定(group, count, mysql) †
テーブルの作成_Create_Table †
- 例1 [#t8afa814]
create table testm (
key1 char(008) primary key,
data1 int8,
data2 int8,
data3 int8
) type=InnoDB;
- 例2 AUTO_INCREMENT, AUTO INCREMENT, PRIMARY KEY [#w456b100]
CREATE TABLE book2
(
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(64),
author_name VARCHAR(32),
detail TEXT,
image VARCHAR(64),
PRIMARY KEY (id)
);
- 例3(合わせ技), DB TYPE, DB CHARSET, ENCODE [#i2fb695c]
CREATE TABLE book2
(
id INT(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(64),
author_name VARCHAR(32),
detail TEXT,
image VARCHAR(64),
PRIMARY KEY (id)
) type=InnoDB DEFAULT CHARSET=utf8;
テーブル構造の変更 †
not exists の高速化 †
- ○○が含まれないデータを追加、などで not exists を使用する時があるが遅い。。。
- 結局高速化はindexに頼るしか無かったが、一応メモ書き
- not exists -> left join.
残念だがあまり高速化されなかった。
- not exists code
insert into table1 (colum1,colum2,colum3)
select table2.colum1,table2.colum2,table2.colum3
from table2
where not exists
(select colum2 from table1
where table2.colum1=table1.colum1 and
table2.colum2=table1.colum2 and
table2.colum3=table1.colum3)
- left join
insert into table1 (colum1,colum2,colum3)
select table2.colum1,table2.colum2,table2.colum3
from table2
left join table on
table2.colum1=table1.colum1 and
table2.colum2=table1.colum2 and
table2.colum3=table1.colum3
where table1.colum1 is null;
- indexを付ける。10倍位高速になりました。
ALTER TABLE table1 ADD INDEX index_name(colum1, colum2, colum3);
ALTER TABLE table2 ADD INDEX index_name(colum1, colum2, colum3);
バージョン情報の表示 †
mysql --version
Global変数の表示 †
SHOW GLOBAL VARIABLES
状態の表示 †
SHOW GLOBAL STATUS
Process の表示 †
SHOW PROCESSLIST
SHOW FULL PROCESSLIST; ← Info が長い文字列の場合に省略しない
ページ, pager, less †
- 設定
pager less -S
- 解除
nopager
ユーザーの作成 †
CREATE USER 'hoge'@'sampleHost' IDENTIFIED BY 'password';
ユーザーの削除 †
DROP USER 'hoge'@'sampleHost';
作成したユーザーの権限変更 †
- グローバルレベル
GRANT ALL ON *.* TO user;
GRANT SELECT, INSERT ON *.* TO user;
- データベースレベル
GRANT ALL ON db_name.* TO user;
GRANT SELECT, INSERT ON dbName.* TO user;
- テーブルレベル
GRANT ALL ON db_name.table_name TO user;
GRANT SELECT, INSERT ON db_name.mytbl TO user;
- カラムレベル
GRANT SELECT (col1), INSERT (col1, col2) ON db_name.table_name TO user;
- 権限の確認
show grants for 'ユーザー名'@'ホスト名';
テーブルが壊れた時の修正。「Table is marked as crashed and should be repaired」 error, 修正。 †
Version 5.7 †
CentOS7 へのインストール †
リンク †
- CentOS7に mysql-community-server をインストールし、LAN内の別マシンからアクセス可能にする。(外部)
- centOS7でLAMP環境を作る(外部)
MariaDBの削除 †
sudo yum remove mariadb-libs
sudo rm -rf /var/lib/mysql
リポジトリファイルのインストール †
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
MySQLをインストール †
sudo yum install mysql-community-server mysql-community-client
php-mysql のインストール †
yum install --enablerepo=remi,remi-php70 php-mysqlnd
サービスの起動 †
sudo systemctl start mysqld
初回パスワードの確認 †
sudo cat /var/log/mysqld.log | grep password
初回設定 †
mysql_secure_installation
サービスの再起動 †
sudo systemctl restart mysqld
サービスの自動起動 †
旧バージョンからデータで上書きした際、起動できなくなる(バックアップ, リストア) †
リンク(外部) †
原因 †
- ユーザーのパスワードが上書きされる
- そのパスワードが新しいサーバーのパスワードポリシーに合っていない
対策 †
- Safe mode(セーフモード)で起動(CentOS7 の場合)
- systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
- systemctl start mysqld
- mysql の upgrade
mysql_upgrade -u root -p