- 投稿日:2020-04-09T23:04:32+09:00
db インデックスについて
インデックスについて
インデックスとは
インデックスとは、テーブルの情報を探すときに、検索しやすいようにしておいたもの。
テーブルに格納されたデータは、順番に並んでいるわけではないので、検索していくときは上から順に調べていくのは、非常に効率が悪い。
このようなときに、インデックスを作成すると効率よく検索できる場合がある。例えば、idカラムとnameカラムがあった場合、インデックスをnameカラムを対象に作成すると、nameカラムを昇順に並び変え、nameカラムを検索するときに高速で検索することができる。デメリット
インデックスはテーブルとは別にデータを保持するので、テーブルにデータを追加するとインデックスにもデータが追加される。そのため、再度並び替えなどを行うと、データを追加する時の処理が遅くなる。なので、格納されているデータが少ないテーブルではインデックスを作成しても効果は期待されない。
- 投稿日:2020-04-09T21:40:38+09:00
MySQLとmariaDBにおけるJSON関連の差異
mariaDBでJSON型のカラムを扱ってはまったのでメモ
環境
Mysql : 5.7.29
mariaDB : 10.5.2データ準備
create table sample (id int,item json); insert into sample values(1,'{"kanagawa":"yokohama"}'); insert into sample values(2,'{"yamanashi":"kofu"}');itemはkey:県名、value:県庁所在地のJSON。
単純な抽出
まずは単純にselect。差は全くない。
MySQLselect * from sample; +------+--------------------------+ | id | item | +------+--------------------------+ | 1 | {"kanagawa": "yokohama"} | | 2 | {"yamanashi": "kofu"} | +------+--------------------------+MariaDBselect * from sample; +------+--------------------------+ | id | item | +------+--------------------------+ | 1 | {"kanagawa": "yokohama"} | | 2 | {"yamanashi": "kofu"} | +------+--------------------------+集約
1.GROUP_CONCAT
区切り文字を指定しなければいずれも,(カンマ)で結合される。
MySQLselect GROUP_CONCAT(item) from sample; +------------------------------------------------+ | GROUP_CONCAT(item) | +------------------------------------------------+ | {"kanagawa": "yokohama"},{"yamanashi": "kofu"} | +------------------------------------------------+MariaDBselect GROUP_CONCAT(item) from sample; +----------------------------------------------+ | GROUP_CONCAT(item) | +----------------------------------------------+ | {"kanagawa":"yokohama"},{"yamanashi":"kofu"} | +----------------------------------------------+2.JSON_ARRAYAGG
ここがハマったポイント。MySQLはJSON型のカラムをそのまま配列として返すが、MariaDBはエスケープシーケンスされた文字列の配列として返す。
原因は推測だがMariaDB上では「JSON型はLONGTEXT型のエイリアス」1であることと思われる。MySQLselect JSON_ARRAYAGG(item) from sample; +---------------------------------------------------+ | JSON_ARRAYAGG(item) | +---------------------------------------------------+ | [{"kanagawa": "yokohama"}, {"yamanashi": "kofu"}] | +---------------------------------------------------+MariaDBselect JSON_ARRAYAGG(item) from sample; +------------------------------------------------------------+ | JSON_ARRAYAGG(item) | +------------------------------------------------------------+ | ["{\"kanagawa\":\"yokohama\"}","{\"yamanashi\":\"kofu\"}"] | +------------------------------------------------------------+3.JSON_OBJECTAGG
JSON_OBJECTAGGもJSON_ARRAYAGGと同様
MySQLselect json_objectagg(id,item) from sample; +-------------------------------------------------------------+ | json_objectagg(id,item) | +-------------------------------------------------------------+ | {"1": {"kanagawa": "yokohama"}, "2": {"yamanashi": "kofu"}} | +-------------------------------------------------------------+MariaDBselect json_objectagg(id,item) from sample; +---------------------------------------------------------------------+ | json_objectagg(id,item) | +---------------------------------------------------------------------+ | {"1":"{\"kanagawa\":\"yokohama\"}", "2":"{\"yamanashi\":\"kofu\"}"} | +---------------------------------------------------------------------+MariaDBでMySQL同等の結果を取得するためには
一応、SQLを工夫すればMariaDBでもMySQL同等の結果が取得できる。但し、項目値によってはkeyが重複するなどするため、JSONとしての正しさは保証されない。
JSON_ARRAYAGG
MariaDBselect CONCAT('[',GROUP_CONCAT(item),']') from yukisaki_database.sample; +------------------------------------------------+ | CONCAT('[',GROUP_CONCAT(item),']') | +------------------------------------------------+ | [{"kanagawa":"yokohama"},{"yamanashi":"kofu"}] | +------------------------------------------------+JSON_OBJECTAGG
MariaDBselect CONCAT('{',GROUP_CONCAT(CONCAT('"',id,'":',item)),'}') from sample; +--------------------------------------------------------+ | CONCAT('{',GROUP_CONCAT(CONCAT('"',id,'":',item)),'}') | +--------------------------------------------------------+ | {"1":{"kanagawa":"yokohama"},"2":{"yamanashi":"kofu"}} | +--------------------------------------------------------+
- 投稿日:2020-04-09T18:47:33+09:00
MySQL基本
はじめに
こちらではMySQLの基本操作を書いていきます。
複雑だったりレベルの高い操作を書くよりも今日インストールしたばっかりで何すればいいの?
みたいな人を対象にしようと思っております。環境
VirtualBox
Vagrant
Cent0S7
MySQL(Ver 8.0.19)こちらで構築の紹介をさせていただいてます参考にどうぞ
MySQL版データベースって?
データベースとは・・・
ベースとなるデータの集合体・・・・といえば雑ですが・・・
つまりは情報の集まりですね。
なんの情報を扱うかは何をしたいかそれぞれちがいますが・・・例:hogeさんhugaという人の情報があったとします
名前:hoge
年齢:16歳
出身:東京名前:huga
年齢:27歳
出身:大阪とします
id 名前 年齢 出身 1 hoge 16 東京 2 huga 27 大阪 3 piyo 38 愛知 こういった情報の集まりがデータベースとなります
この情報を元に説明していきます。
基本的な操作ですが
CRUDを中心に説明したいと思います。CRUD(クラッド)って?
C -> Create(製作)
R -> Read(閲覧)
U -> Update(更新)
D -> Delete(削除)の頭をとったものです。
MySQLの操作
DB内容を操作するのはいいですがまずはDBそのものの操作を確認してみましょう。
書いて確認して〜みたいな流れでもいいですが読み返す時にまとまっている方が楽だと思うので。
さらっと要点だけ書いていきたいと思います。ユーザの作成
create user [ユーザ名]@[ホスト名] identified by '[パスワード]';権限付与
mysql> grant [権限] on [データベース名].* to [ユーザ名]@[ホスト名];mysql> drop user [ユーザ名]@[ホスト名]DBの確認
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+DBの作成
mysql> create database [任意のDB名];名前変更
mysql> rename [変更したいデータベース名] to [新データベース名] ;削除
mysql> drop database [削除したいデータベース名];使用するデータベース選択
mysql> use [データベース名];外部ファイルの読み込み
mysql> \. [ファイルパス]/[ファイル名].sqlDBデーブル操作
こちらではDBの操作をみてみましょう
ここからはカラムとレコードを用意するの出会うがappdb.sqlというファイルを自分で作って操作しながら説明していきたいと思います。appdb.sql--テーブルの削除 drop table if exists db01; --テーブルの作成 create table db01 ( id int unsigned primary key auto_increment, name varchar(20), age int unsigned, from_ja varchar(20) ); --レコードの追加 insert into db01(name,age,from_ja)values('hoge',18,'東京'); --レコードの追加(まとめて) insert into db01(name,age,from_ja)values ('fuga',27,'大阪'), ('piyo',38,'愛知'); --テーブル内容表示 select * from db01;実行結果
+-------+------+------+---------+ | id | name | age | from_ja | +-------+------+------+---------+ | 1 | hoge | 18 | 東京 | | 2 | fuga | 27 | 大阪 | | 3 | piyo | 38 | 愛知 | +-------+------+------+---------+ここからはSQL上で説明していきます
テーブル情報の確認mysql> desc [テーブル名]抽出
mysql> select * from [テーブル名] where [抽出したい内容]レコードの追加
mysql> insert into [テーブル名]([カラム名])values([データ]);レコード更新
mysql> update [テーブル名] set [カラム名] = [データ] where [カラム名] = [データ];レコードの削除
mysql> delete from [テーブル名] where [カラム名] = [データ];カラムの追加
mysql> alter table [テーブル名] add column [カラム名] [型] after [カラム名];カラムの更新
mysql> alter table [テーブル名] change [旧カラム名] [新カラム名] [型]カラムの削除
mysql> alter table [テーブル名] drop column [カラム名];そのた
DBでバックアップを取る事もあると思います。
$ mysqldump -u [ユーザ名]@[ホスト名] -p [DB名] > [ファイル名].sqlまとめ
いかがだったでしょうかDBは奥が深いですが簡単にでも理解できていただいたら幸いです。
- 投稿日:2020-04-09T13:21:15+09:00
MySQL構築
はじめに
こちらではMySQLの構築について紹介させていただきます。
まぁどこにでもある普通の内容でQiita使ってる皆様には食傷気味かもしれませんが。なるべくわかりやすくを心掛けて書いていきたいと思います。環境
手順
不要なものを削除(入っていれば)
まず最初にCentOS7にはMariaDBがデフォルトで入っているらしいのでそれを確認(残っていると競合してしまいインストールできないらしい)
$ yum list installed | grep mariaある場合は削除します。
$ sudo yum remove -y mariadb-libs.x86_64データディレクトリも削除(ある場合)
$ rm -rf /var/lib/mysql/MySQL導入
まずMySQLがあるかどうか調べます。
$ yum list | grep mysql akonadi-mysql.x86_64 1.9.2-4.el7 base apr-util-mysql.x86_64 1.5.2-6.el7 base dovecot-mysql.x86_64 1:2.2.36-3.el7_7.1 updates freeradius-mysql.x86_64 3.0.13-10.el7_6 base libdbi-dbd-mysql.x86_64 0.8.3-16.el7 base mysql-connector-java.noarch 1:5.1.25-3.el7 base mysql-connector-odbc.x86_64 5.2.5-8.el7 base pcp-pmda-mysql.x86_64 4.3.2-5.el7_7 updates php-mysql.x86_64 5.4.16-46.1.el7_7 updates php-mysqlnd.x86_64 5.4.16-46.1.el7_7 updates qt-mysql.i686 1:4.8.7-3.el7_6 base qt-mysql.x86_64 1:4.8.7-3.el7_6 base qt5-qtbase-mysql.i686 5.9.7-2.el7 base qt5-qtbase-mysql.x86_64 5.9.7-2.el7 base redland-mysql.x86_64 1.0.16-6.el7 base rsyslog-mysql.x86_64 8.24.0-41.el7_7.4 updatesMySQLサーバをインストールしたいですがないようです。
CentOS7には公式のyumリポジトリにはないようなので公式からrpmファイルをインストールすることになります。SQL公式からインストールのやり方を書いてくださっているのでそちらを参考に構築していきます。
$ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm正常にインストールできているか確認
$ yum repolist enabled | grep "mysql.*-community.*"インストール
$ sudo yum install mysql-community-serverバージョンの確認
$ mysql --version mysql Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)起動
$ sudo service mysqld start起動確認
$ sudo service mysqld statusactive (running)
と表示されていたら起動されています。設定
この状態だとOS起動する度にSQLを起動しなおさないといけないので
自動起動するように設定します。$ systemctl start mysqld再起動して確認してみましょう。
起動していたら成功です。続いてパスワードの設定
初期パスワードはmysqld.logのなかに書かれています。確認
$ sudo cat /var/log/mysqld.log | grep root 2020-04-09T01:15:32.727302Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: [初期パスワード]起動してログイン
$ mysql -u root -p Enter password:[初期パスワードを入力]パスワードの変更
方法はいくつかありますが公式のセキュリティ改善で紹介されているのでこちらで紹介いたします$ sudo mysql_secure_installation最初にパスワードを聞かれるので初期パスワードを入力して新しいパスワードを入力してください
$ mysql -u root -p Enter password:[新しく設定したパスワードを入力]ログインできたら成功です。
パスワードポリシー
新しいパスワードを設定する際にパスワードポリシーを知る必要があります。
こちらではMySQLに保存されているパスワードポリシーを確認してみましょう。公式にやり方が載っているので参考に
mysql> SHOW VARIABLES LIKE 'validate_password.%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 8 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+参考程度に一例
mysql> set global validate_password.length=9;確認
mysql> SHOW VARIABLES LIKE 'validate_password.%'; +--------------------------------------+--------+ | Variable_name | Value | +--------------------------------------+--------+ | validate_password.check_user_name | ON | | validate_password.dictionary_file | | | validate_password.length | 9 | | validate_password.mixed_case_count | 1 | | validate_password.number_count | 1 | | validate_password.policy | MEDIUM | | validate_password.special_char_count | 1 | +--------------------------------------+--------+変わったのがわかると思います。
試しに新しく作ってみましょう
mysql> create user 'user@localhost' identified by '<?lz*V6?'; ERROR 1819 (HY000): Your password does not satisfy the current policy requirements8文字でエラーが出ているのがわかると思います。
まとめ
いかがだったでしょうか今回はCentOSでMySQLのインストールとパスワードの初期設定について紹介いたしました。
参考になれば幸いです。
- 投稿日:2020-04-09T09:57:30+09:00
MySQL SQL文で自動インクリメントなどの機能を備えたusersテーブルを作る
目的
- idの自動インクリメントやNot NULL制約、データの不一致制約などの機能が盛り込まれたベーシックなusersテーブルの作成を行う
実施環境
- ハードウェア環境
項目 情報 OS macOS Catalina(10.15.3) PC機種 MacBook Pro (16-inch ,2019) プロセッサ 2.6 GHz 6コアIntel Core i7 メモリ 16 GB 2667 MHz DDR4 グラフィックス AMD Radeon Pro 5300M 4 GB Intel UHD Graphics 630 1536 MB
- ソフトウェア環境
項目 情報 備考 MySQLバージョン 8.0.19 for osx10.13 on x86_64 Homwbrewを用いて導入 前提環境
下記コマンドを実行してMySQLにログインすることができること。
$ mysql -u root -p
command not found
と出力された方はこちら→Mac HomebrewでMySQLをインストールする- rootユーザのパスワードを失念してしまった方はこちら→MySQL 8.0.18 のrootパスワードを忘れた時のリセット方法
作成目標テーブルの確認
- testという名前のデータベースを作成し、その中にusersテーブルを作成する。
下記に作成するusersテーブルのイメージを記載する。
id name create_at update_at 1 山田 太郎 yamada.tarou@mail.com YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS usersテーブルの全てのカラムに共通する詳細情報を記載する。
- NULLを許容しない。
usersテーブルの各カラムの詳細情報を記載する。
- idカラム: integer型おカラムとしてレコードが追加される際に自動インクリメントされた数値が格納される。このカラムを主キーとする。
- nameカラム: varchar型のカラムとして文字数上限を30文字とする。
- emailカラム: varchar型のカラムとして文字数上限を256文字とする。(Simple Mail Transfer Protocolでのアドレス文字数を根拠に決定)
- create_atカラム: datetime型のカラムとして初回データ格納時に自動で日時を格納する。
- update_atカラム: datatime型のカラムとして初回データ格納時にはcreate_atカラムと同じ値を格納し、当該レコードのデータに更新があった時の日時を格納する。
実施方法概要
- ログイン
- データベースの作成
- テーブルの作成
- 確認
実施方法詳細
ログイン
下記コマンドを実行してMySQLのターミナルを起動する。(MySQLのルートユーザのパスワードを忘れてしまった方はこちら→MySQL 8.0.18 のrootパスワードを忘れた時のリセット方法)
$ mysql -u root -pMySQLにターミナルからログインできる事を確認する。(ターミナルに
mysql>
と表示されていればOK)データベースの作成
MySQLのにターミナルでログイン後、下記を実行してtestデータベースを作成する。
mysql> create database test;下記を実行してデータベースを指定する。
mysql> use test; Database changedテーブル作成
下記を実行してusersテーブルを作成する。
mysql> create table users ( -> id integer primary key auto_increment, -> name varchar(30) not null default 'user', -> email varchar(256) not null default 'example@email.com' unique, -> created_at datetime not null default current_timestamp, -> updated_at datetime not null default current_timestamp on update current_timestamp -> );確認
下記を実行して正常にテーブルが作成されている事を確認する。
mysql> show columns from users;下記のように出力される事を確認する。
mysql> show columns from users; | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+-------------------+-----------------------------------------------+ | id | int | NO | PRI | NULL | auto_increment | | name | varchar(30) | NO | | user | | | email | varchar(256) | NO | UNI | example@email.com | | | created_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED | | updated_at | datetime | NO | | CURRENT_TIMESTAMP | DEFAULT_GENERATED on update CURRENT_TIMESTAMP | +------------+--------------+------+-----+-------------------+-----------------------------------------------+下記を実行してダミーデータを格納する。
mysql> insert into users -> (id, name) -> value (1, 'test_user');下記を実行してダミーデータが正常に格納されている事を確認する。
mysql> select * -> from users;下記のように表示される事を確認する。
mysql> select * -> from users; +----+-----------+-------------------+---------------------+---------------------+ | id | name | email | created_at | updated_at | +----+-----------+-------------------+---------------------+---------------------+ | 1 | test_user | example@email.com | YYYY-MM-DD HH:MM:SS | YYYY-MM-DD HH:MM:SS | +----+-----------+-------------------+---------------------+---------------------+下記を実行してダミーデータのnameを書き換える。
mysql> update users -> set name = 'test_user_1' -> where id = 1;下記を実行してダミーデータのnameが書き換わっている事を確認する。
mysql> select * -> from users;下記のように表示される事を確認する。(update_atも更新されている)
mysql> select * -> from users; +----+-------------+-------------------+---------------------+---------------------+ | id | name | email | created_at | updated_at | +----+-------------+-------------------+---------------------+---------------------+ | 1 | test_user_1 | example@email.com | YYYY-MM-DD HH:MM:SS | YYYY-MM-DD HH:MM:SS | +----+-------------+-------------------+---------------------+---------------------+
- 投稿日:2020-04-09T04:15:47+09:00
ZABBIXのデータベースをデータベースレプリケーションでバックアップする
ZABBIXのデータベースをバックアップする手段として、レプリケーションを使って見ることにしました。
そのときの手順をまとめました。
OS データベース IPアドレス ZABBIXサーバー Raspbian Buster MariaDB 192.168.1.11 DBサーバー Ubuntu 18.04 MariaDB 192.168.3.22 ZABBIXサーバー側の設定
ZABBIXサーバーのデータベースがレプリケーションのマスターサーバーになる。
cnfファイルの設定
- bind設定をコメント化して、サーバーIDとバイナリログの設定をアンコメントして修正
cd /etc/mysql/mariadb.conf.d vi 50-server.cnf50-server.cnf[mysqld] ・ ・ # bind-address = 127.0.0.1 ・ ・ server-id = 101 log_bin = /var/log/mysql/mysql-bin.log
- 設定内容を反映させるためにMySQLを再起動
systemctl restart mysql.serviceスレーブサーバー用のアカウントを作成
mysqlコマンドに入る
mysql -u root -pcreate user 'repl'@'192.168.3.22' identified by 'P@ssw0rd'; grant replication slave on *.* to 'repl'@'192.168.3.22';zabbixデーターベースのスナップショットを取得
zabbixデーターベースの内容をスレーブサーバーにコピーするためスナップショットを取得します。
- スナップショット取得中にDBが更新されないようにテーブルの書き込みをロック
flush tables with read lock;
- バイナリログの状態を確認する
show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 123628 | | | +------------------+----------+--------------+------------------+mysqlコマンドを抜ける
\q
- zabbixテーブルのスナップショットを取得
mysqldump --single-transaction -u root -p zabbix > zabbix.dump
- テーブルの書き込みをロックを解除
mysqlコマンドに入る
mysql -u root -p unlock tables;mysqlコマンドを抜ける
\q
- zabbixテーブルのスナップショットをscpでスレーブサーバーに転送
scp zabbix.dump ubuntu@192.168.3.22:/home/ubuntuここまでで、ZABBIXサーバー側の設定は完了
バックアップ用サーバー側の設定
cnfファイルの設定
- サーバーIDの設定をアンコメントして修正
cd /etc/mysql/mysql.conf.d sudo vi mysqld.cnfmysqld.cnf[mysqld] ・ ・ server-id = 102
- 設定内容を反映させるためにMySQLを再起動
systemctl restart mysql.servicezabbixデーターベースのスナップショットを反映
mysqlコマンドに入る
mysql -u root -p create database zabbix; use zabbix; source /home/ubuntu/zabbix.dumpスレーブデーターベースの設定
- スレーブデーターベースからマスターデータベースへ接続するためのパラメータを設定
※見やすさのために改行していますが実際には1行で入力
change master to master_host='192.168.1.11', master_user='repl', master_password='P@assw0rd', master_log_file='mysql-bin.000001', master_log_pos=123628;
- レプリケーション対象にzabbixデータベースを設定
change replication filter replicate_do_db = (zabbix);
- レプリケーションを開始
start slave;
- スレーブサーバーの状態を確認
特にエラーが出力されていなければ問題なくレプリケーションの設定が行われています。
エラーの内容は、Last_IO_Error:、Last_SQL_Error:に表示されます。
Slave_SQL_Running_State:に状態が表示されます。show slave status\G*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.1.11 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 1693614 Relay_Log_File: mysql-slave2-relay-bin.000002 Relay_Log_Pos: 1570431 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: zabbix Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 1693614 Relay_Log_Space: 1570645 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 101 Master_UUID: Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)レプリケーションの動作確認
最後に、zabbixサーバのzabbixデーターベースにhogeテーブルを追加したときに正常にレプリケーションが行われるか確認します。
バックアップ用サーバーに、hogeテーブルがないことを確認します。
mysql -u root -p use zabbix; show tables; Empty set (0.00 sec)ZABBIXサーバーのzabbixデータベースにhogeテーブルを追加します。
mysql -u root -p use zabbix; create table hoge ( id INT not null ); show tables; +-------------------+ | Tables_in_example | +-------------------+ | hoge | +-------------------+・バックアップ用サーバーのzabbixデータベースを確認し、hogeテーブルが追加されていれば、正常にレプリケーションが行われています。
mysql -u root -p show tables; +-------------------+ | Tables_in_example | +-------------------+ | hoge | +-------------------+以上で、設定は完了です。
レプリケーションの状態をZABBIXで監視する
下記のサイトを参考に設定する。
Zabbix MySQLスレーブサーバ(レプリケーション)の監視設定メモ
エラーで止まっているレプリケーションを再開する
エラーの状況をエラーログや「SHOW SLAVE STATUS」などで確認する。
スレーブ側でSQLがエラーになっていて無視してよいものであれば、スキップして次に進ませる。STOP SLAVE SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE参考情報
- 投稿日:2020-04-09T01:03:34+09:00
環境変数に空文字``を設定する
コンバンワ、今日も相変わらずembulkのお世話になっていたプレイライフの合原です。
ちょびっと気づきがあったので、tips的な記事を。
※話をスコープしたいので、embulkで自体の説明は割愛します。
embulkでは環境変数が使える
みんな大好きバルクデータローダembulkでは、環境変数を使って、(例えば環境に応じて等)値を設定することができます。
Rails環境下でembulkを使って快適に数十万件のデータを取り込むとか読んでいただけますと雰囲気がわかるかと思います。例えば、
export DB_HOST=127.0.0.1 export DB_NAME='db' export DB_USER=db_user export DB_PASSWORD="hogehoge"とあると、これを、
# out: type: mysql host: {{ env.DB_HOST }} database: {{ env.DB_NAME }} user: {{ env.DB_USER }} password: {{ env.DB_PASSWORD }} table: target_table :と言った具合に参照できるようになります。
環境変数に''を設定するには?
ローカル環境で開発する際など、よくDBのパスワードを
''
にしているケースはあるかと思います。export DB_PASSWORD=""export DB_PASSWORD=''上記の二つは、いずれも未定義状態になってしまいます。
答えは、export DB_PASSWORD="''"一応、確かめてみると...
$ HOGE="" $ echo $HOGE $ HOGE=''" $ echo $HOGE $ HOGE="''" $ echo $HOGE ''... というわけで、
password: {% if env.RAILS_ENV == 'development' %} '' {% else %}{{ env.DB_PASSWORD }}{% endif %}というようなことをする必要はなく、
password: {{ env.DB_PASSWORD }}で済みます。
以上。