0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ただただコンテナMySQLからMDSにテーブルを移行してみた

Posted at

MySQLの移行ってどうやるのかいまいち分かってなかったので
サーバ内にコンテナで建てられているMySQLデータベースをOracle CloudのMDSに移行してみた

用意した環境

環境は下記の通り
・Oracle Linux8.7
・aarch64
・docker 20.10.22
・docker compose v2.15.1

コンテナ情報

  • DockerFile
FROM arm64v8/mysql

COPY ./my.cnf /etc/mysql/conf.d/my.cnf
  • compose.yaml
version: "3.9"

services:
  mysql:
    image: mysql-aarch:latest
    platform: linux/arm64/v8
    container_name: mysql-container
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: database
    ports:
      - "3306:3306"
    volumes:
      - ./my.cnf:/etc/mysql/conf.d/my.cnf
  • my.cnf
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
max_allowed_packet=256M
innodb_file_per_table=ON
default-authentication-plugin=mysql_native_password

対象のデータベース情報

データベース

mysql> CREATE DATABASE testdb;

テーブル

### CREATE
mysql> CREATE TABLE user (
    -> id INT(11) NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(255) NOT NULL,
    -> email VARCHAR(255) NOT NULL,
    -> password VARCHAR(255) NOT NULL,
    -> PRIMARY KEY (id)
    -> );

### INSERT
mysql> INSERT INTO user (name, email, password)
VALUES ('John Doe', 'johndoe@example.com', 'password123'),
       ('Jane Smith', 'janesmith@example.com', 'password456'),
       ('Bob Johnson', 'bobjohnson@example.com', 'password789');

用意したテーブル

mysql> select * from user;
+----+-------------+------------------------+-------------+
| id | name        | email                  | password    |
+----+-------------+------------------------+-------------+
|  1 | John Doe    | johndoe@example.com    | password123 |
|  2 | Jane Smith  | janesmith@example.com  | password456 |
|  3 | Bob Johnson | bobjohnson@example.com | password789 |
+----+-------------+------------------------+-------------+

(環境用意するのにも1時間以上かかった。。。)

移行の手順を追っていく

今回は下記記事を参考にやってみる
https://kosuke-space.com/mysql-db-migration

dumpを取得する

コマンドを実行してダンプファイルを作ってみる。
コンテナなので、サーバからコマンドを実行する。
 ※コマンドライン上にパスワード書くなって怒られた
-pのあとはスペースを入れたいところだけど、スペースを入れたら実行できないので注意

$ [opc@docker ~]$ docker exec mysql-container mysqldump -u root -p'root' testdb > /tmp/mysql-backup.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[opc@docker ~]$ 

サーバの/tmpにファイルがあることを確認

[opc@docker ~]$ ls /tmp/
mysql-backup.sql

MDSにダンプファイルを当て込む

MDSへの接続はNLBを使ってパブリック経由で実施する
本当はサーバからやりたかったけど、mysql-clientがaarch64で見つからなかったので、コンテナの中から実施
 ※コンテナ内の/tmpにもダンプファイルを置いておく

空のデータベースを作成する。

### 作成前
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

### 作成後
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+

MDSのデータベースにダンプファイルを当て込む。
びっくりするほどあっさり完了。

bash-4.4# mysql -h 140.***.***.*** -u admin -p testdb < /tmp/mysql-backup.sql

確認してみたら本当にあった

mysql> select * from user;
+----+-------------+------------------------+-------------+
| id | name        | email                  | password    |
+----+-------------+------------------------+-------------+
|  1 | John Doe    | johndoe@example.com    | password123 |
|  2 | Jane Smith  | janesmith@example.com  | password456 |
|  3 | Bob Johnson | bobjohnson@example.com | password789 |
+----+-------------+------------------------+-------------+

え?終わり?
あと何を考慮すれば良いんだろう。my.cnfのチューニングとかでしょうか。

一旦おわり

OracleDatabaseと比べてMySQLの移行はかなりあっさりしていて拍子抜けしました。
環境準備のほうが時間かかった気がする。
稼働中に〜とか、CPUの違いで〜とかあるような気がするので
そこらへんはもっと調べておきたいと思いました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?