カテゴリー別アーカイブ: MariaDB(MySQL)

【MariaDB】mariabackupによるバックアップとリストア

大量データのバックアップだったので
mysqldumpよりファイルのバックアップのほうが
よいかなと思ったので試してみたのでメモメモ

バックアップはコマンド一発

特にDBを止める必要もないはず、、

–target-dir で指定したディレクトリ配下に
データディレクトリ(/var/lib/mysqlとか)の中身が
ごっそり格納される

それをtarとかで圧縮して管理すればいい感じ

続いてリストア

圧縮したバックアップファイルを解凍してから

【MySQL】SUPER権限を付与

MySQLで、作業していて

こんな感じでSUPER権限がないよ!
って怒られたときの対処方法をメモメモ

【MySQL】レコード有無を確認せずにINSERTしたい

大量データをINSERTするため、
いちいちレコードの存在確認したくない

・存在しなかったらINSERT、したらスルー

・存在しなかったらINSERT、したらUPDATE

【MySQL】csvのインポート、エクスポート

csvにエクスポートやインポートするときの
方法をメモメモ

まずはエクスポート
tableNameとかは適当に書き換えて

権限で怒られたら

続いてインポート

【MySQL】パーティションの作成、追加、削除、確認

MySQL のパーティションの作成、追加、確認についてメモメモ

・作成
ALTER TABLE tableName PARTITION BY RANGE (TO_DAYS(updateDate)) (
PARTITION p20190831 VALUES LESS THAN (TO_DAYS(‘2019-09-01 00:00:00’)),
PARTITION p20190901 VALUES LESS THAN (TO_DAYS(‘2019-09-02 00:00:00’)),
PARTITION p20190902 VALUES LESS THAN (TO_DAYS(‘2019-09-03 00:00:00’))
);

・追加
ALTER TABLE tableName ADD PARTITION (
PARTITION p20191123 VALUES LESS THAN (TO_DAYS(‘2019-11-24 00:00:00’)),
PARTITION p20191124 VALUES LESS THAN (TO_DAYS(‘2019-11-25 00:00:00’))
);

・削除
ALTER TABLE tableName DROP PARTITION p20191124;

・確認
SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = tableName;

【MariaDB】データディレクトリを変更する

MariaDBのデータディレクトリを変更したかったけど
めんどくさいので、シンボリックリンクで対応

ざっくり手順としては
・DB止める
・新ディレクトリに今動いているデータをコピー(パーミッションを保持して)
・今まで動いていたやつはディレクトリ名を変更
・シンボリックリンクを設定
・DB起動

こんな感じ

【MariaDB】起動時のログにmax_open_filesでなんか怒られてる

MariaDB を起動したあとに、ステータス確認したら
なんか Warning が出てたので、そのときの対応メモ

・Warning メッセージ
[Warning] Could not increase number of max_open_files to more than 1024 (request: 4147)
[Warning] Changed limits: max_open_files: 1024 max_connections: 100 (was 100) table_cache: 447 (was 2000)

・環境
CentOS Linux release 8.0.1905
mysql Ver 15.1 Distrib 10.3.11-MariaDB, for Linux (x86_64) using readline 5.1

/etc/security/limits.conf に下記の2行を追加
念のためバックアップをとっておく

次に、 /usr/lib/systemd/system/mariadb.service にもこちらを追加!
念ためのバックアップも忘れずに

最後に設定した内容を反映

終わり

【MariaDB】大量インサート時のパフォーマンス改善

MariaDBに大量のデータを突っ込もうとしたんだけど、
思ったより時間がかかってしまって。。。

インサートする前にバックアップ取得するから
ダブルライトバッファは必要ないと思い

/etc/my.cnf.d/mariadb-server.cnf に
こちらの1行を追加して、ダブルライトバッファをスキップしてみる
skip_innodb_doublewrite

そしたら、環境によると思うけど
今回は6倍くらい早くなったよ!

【MySql】設定ファイルのチューニング

なんかパフォーマンスが出ないと思って
チューニングしたのでメモメモ

innodb_buffer_pool_size = 13G
 ⇒メモリの80%くらいとか

innodb_log_file_size = 3G
 ⇒innodb_buffer_pool_size の4分の1くらい

innodb_file_per_table=ON
 ⇒テーブル単位で領域を確保するとか

これを追加しておくと、インポートが早くなるとか

バルクアップデート

大量のアップデート文を流すときに
速度改善で役立つSQL

cakephp仕様だけど、別にSQL文はどこでも使えそう