web-dev-qa-db-ja.com

/ var / lib / mysqlフォルダ全体を別のサーバーにコピーできますか? (mysql vs mariadb、異なるバージョン)

以前はMySQLを備えたLinuxシステム(LMDE)を使用していました。システムは、ほとんどのデータベースでinnodb_file_per_tableを使用していました。 (バージョンがわからない、LMDEの「最新」は何か)

現在、MariaDBを使用する新しいシステム(Manjaro/Arch)を使用しています。

$ mysql --version
mysql  Ver 15.1 Distrib 10.0.15-MariaDB, for Linux (x86_64) using readline 5.1

古いシステムにはたくさんの大きなデータベースがあり、mysqldumpでコピーする必要がないことを本当に望んでいました。古いシステムから/ var/lib/mysqlフォルダーをコピーしたいのですが。

これは可能ですか?

9
donquixote

はい、可能です。 (私は質問を書いているときにこれを理解しました)

  1. MariaDBを新しいArchシステムにインストールし、機能することを確認します。
    /etc/mysql/my.cnfに変更を加えます。例えば。 innodb_file_per_table。
    (これ以上はこの質問の範囲外です)
  2. Sudo systemctl stop mysqld
    (両方のサーバーで停止したいが、私の場合、もう一方はすでにオフになっている)
  3. / var/lib/mysqlフォルダーの名前を変更します。/var/lib/_mysqlに。
  4. 古いDebian(LMDE)システムから古い/ var/lib/mysqlフォルダーをコピーします。
  5. / var/lib/mysql内のすべてのファイルの所有権をmysql:mysqlに復元します。
    Sudo chown -R mysql:mysql /var/lib/mysql
  6. Sudo systemctl start mysqld
    -> Job for mysqld.service failed. See "systemctl status mysqld.service" and "journalctl -xe" for details.
  7. Sudo systemctl status mysqld
    ->これはサービスが実行されていることを示していますが、いくつかの問題が発生しています。これがmysql_upgradeの目的です。
  8. mysql_upgrade -u root -p
    ノート:
    • 古いシステムのmysql rootパスワードです。
    • データベース名が無効なため、/ var/lib/mysqlから残りの1つのフォルダーを削除する必要がありました。
    • / var/lib/mysql/mysql_upgrade_infoファイルは書き込み可能である必要があります。
    • プロセスにはしばらく時間がかかる場合があります。
  9. Sudo systemctl restart mysqld

警告:どうやら、より低いMySQLバージョンにダウングレードすることはできません。データベースをMySQL 5.5(または対応するMariaDB)に移行しようとしたところ、サーバーが起動しませんでした。代わりにMySQL 5.6をインストールする必要がありました。 (MySQL 5.6に対応するMariaDBは私のLinuxディストリビューションでは利用できません)。

20
donquixote