LoginSignup
36
38

More than 5 years have passed since last update.

MySQLのFEDERATEDストレージエンジンを利用する

Posted at

はじめに

MySQLのFEDERATEDのストレージエンジンを設定する方法を記述します。

リモートサーバに存在するテーブルをあたかもローカルに存在するかのように
利用することができるようになります。

環境

  • CentOS6.5

  • MySQL 5.6.20

構成

db001に格納されたデータをdb002から操作できるように
db002にFEDERATEDストレージエンジンの設定を行います。

MySQLのインストール

  • MySQL Yum Repositoryの準備
$ wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
$ sudo yum localinstall mysql-community-release-el6-5.noarch.rpm
  • MySQLのインストール
$ sudo yum install mysql-community-client.x86_64 mysql-community-common.x86_64 mysql-community-libs.x86_64 mysql-community-libs-compat.x86_64 mysql-community-server.x86_64
  • MySQLの起動
$ sudo /etc/init.d/mysqld start
  • mysql_secure_installationの実行
$ /usr/bin/mysql_secure_installation

FEDERATEDストレージエンジンの設定

  • db001

データベースを作成します。

mysql> CREATE DATABASE master;
Query OK, 1 row affected (0.00 sec)

テーブルを作成し、データを挿入しておきます。

mysql> use master;
Database changed

mysql> CREATE TABLE table001 (
    ->   id int not null auto_increment,
    ->   name varchar(128) not null,
    ->   PRIMARY KEY (id),
    ->   INDEX idx_name (name)
    ->);

mysql> desc table001;
+-------+--------------+------+-----+---------+----------------+
| Field | Type         | Null | Key | Default | Extra          |
+-------+--------------+------+-----+---------+----------------+
| id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| name  | varchar(128) | NO   | MUL | NULL    |                |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)

mysql> insert into table001 (name) values ('Java');
Query OK, 1 row affected (0.04 sec)

mysql> insert into table001 (name) values ('Ruby');
Query OK, 1 row affected (0.05 sec)

mysql> insert into table001 (name) values ('Python');
Query OK, 1 row affected (0.03 sec)

mysql> select * from table001;
+----+--------+
| id | name   |
+----+--------+
|  1 | Java   |
|  3 | Python |
|  2 | Ruby   |
+----+--------+
3 rows in set (0.00 sec)

db002からのアクセスを許可しておきます。

mysql> GRANT ALL ON master.* TO federated_user@'db002' IDENTIFIED BY '${password}';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
  • db002

サポートされているストレージエンジンを確認します。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

FEDERATEDストレージエンジンを有効にします。

/etc/my.cnf
federated = 1

mysqldを再起動します

$ sudo /etc/init.d/mysqld restart

FEDERATEDストレージエンジンが有効となっていることを確認します。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| FEDERATED          | YES     | Federated MySQL storage engine                                 | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

データベースを作成します。

mysql> CREATE DATABASE federated;
Query OK, 1 row affected (0.01 sec)

db001のmasterデータベースのtable001を操作できるようにFEDERATEDストレージエンジンを
利用してテーブルを作成します。

mysql> USE federated;
Database changed

mysql> CREATE TABLE table001 (
    ->   id int not null auto_increment,
    ->   name varchar(128) not null,
    ->   PRIMARY KEY (id),
    ->   INDEX idx_name (name)
    ->)
    ->ENGINE=FEDERATED
    ->CONNECTION='mysql://federated_user:${password}@db001/master/table001';
Query OK, 0 rows affected (0.05 sec)

動作確認

  • db002

データの参照を確認します。

mysql> select * from federated.table001;
+----+--------+
| id | name   |
+----+--------+
|  1 | Java   |
|  3 | Python |
|  2 | Ruby   |
+----+--------+
3 rows in set (0.01 sec)

データの更新を確認します。

mysql> insert into federated.table001 (name) values ('PHP');
Query OK, 1 row affected (0.04 sec)

mysql> select * from federated.table001;
+----+--------+
| id | name   |
+----+--------+
|  1 | Java   |
|  4 | PHP    |
|  3 | Python |
|  2 | Ruby   |
+----+--------+
4 rows in set (0.00 sec)
  • db001

データの参照を確認します。

mysql> select * from master.table001;
+----+--------+
| id | name   |
+----+--------+
|  1 | Java   |
|  4 | PHP    |
|  3 | Python |
|  2 | Ruby   |
+----+--------+
4 rows in set (0.00 sec)

参考

36
38
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
38