sql >> データベース >  >> RDS >> Mysql

PleskCentOS7でMySQLをPerconaに置き換える方法

    この記事では、一般的なPlesk Onyx 11CentOS7サーバーにプリインストールされているネイティブMySQL®️またはMariaDB®️サービスを置き換える手順の概要を説明します。この手順では、既存のMySQL関連のバイナリを削除し、それらを適切なバージョンのPerconaバイナリに置き換えます。これらのPerconaバイナリが配置されると、一般的なマルチステージMySQLインクリメンタルバージョンアップグレードが処理され、既存のデータベースとPerconaバイナリが目的のPercona5.7バージョンになります。

    メンテナンスの期待:長さとダウンタイム

    推奨されるメンテナンス期間: 90分
    予想される最小ダウンタイム: 約30分のサービスフラッピング

    この手順で予想されるMySQLサービスのダウンタイムは、MySQLサービスの可用性が繰り返し上下する(羽ばたき)30分未満です。この図は、すべてがスムーズに進み、予期しないエラーが発生しないことを前提としています。推奨されるメンテナンス時間は、エラーが発生した場合のトラブルシューティングに時間をかけ、万が一すべての変更を元に戻してメンテナンスプランを中止する必要が生じた場合に30分余分にかかる時間を考慮しています。

    メンテナンス段階の概要

    計画は準備タスクと段階に分けられます。準備タスクは、メンテナンスウィンドウの開始時間より前に完了する必要があります。ステージはメンテナンスイベントウィンドウ全体で実施され、アウトラインの各重要なステージを達成するための手順全体をウォークスルーします。

    準備–メンテナンス前のタスク

    これらの2つの重要なタスクは、メンテナンスウィンドウの開始予定時刻より前に完了する必要があります。

    • 既存のMySQL構成ファイルをコピーする
    • MySQLデータベースデータのステージバックアップ

    この計画ではステージ0を使用して、MySQLデータのバックアッププロセスを促進します。 MySQLが保持するデータの量はサーバーごとに大きく異なるため、rsyncなどの増分バックアップソリューションを事前に実行することをお勧めします。 メンテナンスイベントウィンドウに移動します。 Rsyncは、MySQLの実行中に静的データの大部分をバックアップし、MySQLがメンテナンスのためにシャットダウンされると、増分の差をバックアップします。

    既存のMySQL構成ファイルをコピーします:
    1) 既存の自分自身の構成ファイルのバックアップコピーを作成します。

    cp -pv /etc/my.cnf{,.pre-percona.bak}

    MySQLデータベースデータのステージバックアップ:

    2) 次のrsyncを実行して、MySQLデータのクローンを作成します。 [重要:末尾のスラッシュが必要です]

    rsync -vaH /var/lib/mysql{,.pre-percona}/

    注:非常に大規模なデータベースは、完了するまでにかなり時間がかかるため、それに応じて計画してください。

    3) ステップ1が完了するのを待ってから、ステージ1を開始します。

    ステージ1– MySQLをシャットダウンし、RsyncFinalSyncを再実行します

    ステージ1の目的は、続行する前にMySQLデータの元のバックアップが確実に実行されるようにすることです。これを実現するには、MySQLサービスを完全に停止して、すべてのバッファーが書き込まれ、データベースに追加の変更が書き込まれないようにする必要があります。停止すると、rsyncが再度実行され、停止した元のデータとターゲットのバックアップデータの違いがコピーされます。

    1) MySQL/MariaDBサービスをシャットダウンします

    systemctl stop mysql

    2) 次のrsyncを再実行して、クローンデータを完成させます。 [重要:末尾のスラッシュが必要です]

    rsync -vaH /var/lib/mysql{,.pre-percona}/

    3) ステージ3に進む前に、rsyncが完了するのを待ちます。

    ステージ2–MariaDB5.5バイナリをPercona5.5に置き換えます

    注:MariaDB5.5はOnyx11 CentOS 7とともにインストールされるバージョンであるため、これが出発点です。

    既存のバイナリを置き換えるには、yumの代わりにRPMコマンドラインツールを使用して、システムから必要なバイナリパッケージを削除する必要があります。これにより、他のシステムパッケージにリンクしている依存関係に触れることなく、パッケージを削除できます。 PerconaはMariaDBと同様に、MySQLのドロップイン代替品であるため、新しいバイナリが配置されると、リンクされた依存関係は違いを認識せず、正常に機能します。

    1) 依存関係のないMariaDBパッケージを削除します:

    rpm -e --nodeps mariadb mariadb-libs mariadb-server

    2) mariadb-develパッケージを削除します(パッケージが見つからない場合の削除の失敗を避けるために、これを上記とは別のコマンドとして実行します)

    rpm -e --nodeps mariadb-devel

    3) Perconaリポジトリをインストールします:

    yum install https://www.percona.com/redir/downloads/percona-release/redhat/percona-release-0.1-4.noarch.rpm

    4) Percona DBサーバーをインストールします:

    yum install Percona-Server-client-55 Percona-Server-server-55 Percona-Server-shared-55

    5) 次のコマンドを実行します(InnoDBプラグインを正しくロードできるようにします)

    mv /var/lib/mysql/ibdata1 /var/lib/mysql/ibdata1.bak
    cp -a /var/lib/mysql/ibdata1.bak /var/lib/mysql/ibdata1
    mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0.bak
    cp -a /var/lib/mysql/ib_logfile0.bak /var/lib/mysql/ib_logfile0
    mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1.bak
    cp -a /var/lib/mysql/ib_logfile1.bak /var/lib/mysql/ib_logfile1

    6) ポート3306でリッスンしているプロセスがないことを確認し、プロセスを強制終了します。

    netstat -tulpn | grep 3306

    7) MySQL(現在はPercona 5.5)を起動します

    service mysql start

    8) mysql_upgradeスクリプトを実行します

    mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

    9) [オプション] PerconaToolkitからPerconaXtraDBCluster UDFを有効にします:

    plesk db -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'"
    plesk db -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"
    plesk db -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"

    10) MySQLを再起動して、アップグレード手順を完了します

    systemctl start mysql

    ステージ3–PleskMySQLパッケージをPleskMySQLコミュニティパッケージに切り替えます

    PleskでのPerconaの実行は、サポートされていない構成です。このため、Plesk MySQLパッケージと新しいPerconaバイナリ間の依存関係を満たすには、代わりにPleskMySQLリリースをPleskMySQLコミュニティリリースの使用に切り替える必要があります。この変更は、Perconaバージョンのアップグレードとダウングレードを容易にするために必要です。

    1) 必要なリポジトリ構成ファイルを作成します:

    printf '[PLESK_17_8_11-dist] %s\nname=PLESK_17_5_3 dist %s\nbaseurl=http://autoinstall.plesk.com/PSA_17.8.11/dist-rpm-CentOS-7-x86_64/ %s\nenabled=1 %s\ngpgcheck=1 %s\n' > /etc/yum.repos.d/plesk178.repo

    2) 新しいリポジトリから「plesk-mysql-server-community」パッケージをインストールします:

    yum install plesk-mysql-server-community

    3) /etc/yum.repos.d/plesk178.repoファイルは不要になったため、無効にします。

    mv /etc/yum.repos.d/plesk178.repo{,.disabled}

    4) 依存関係に触れることなく、「plesk-mysql-server」パッケージを削除します。

    rpm -e --nodeps plesk-mysql-server

    これで、Perconaがインストールされ、ベース5.5バージョンで動作するはずです。次の段階は、バイナリがアップグレードされる一般的なMySQLアップグレードプロセスと同じです。その後、mysql_upgradeツールを使用してスキーマの更新が手動で行われます。

    Percona5.5を5.6にアップグレード

    1) MySQLサービスを停止します:

    service mysql stop

    2) 依存関係のないPercona55パッケージを削除します:

    rpm -e --nodeps Percona-Server-shared-55 Percona-Server-client-55 Percona-Server-server-55

    3) Percona56パッケージをインストールする

    yum install Percona-Server-shared-56 Percona-Server-client-56 Percona-Server-server-56

    4) ポート3306でリッスンしているプロセスがないことを確認し、プロセスを強制終了します。

    netstat -tulpn | grep 3306

    5) MySQLサービスを開始します:

    service mysql start

    6) MySQLテーブルのアップグレード:

    mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

    ステージ4–Percona5.6を5.7にアップグレード

    1) MySQLサービスを停止します:

    service mysql stop

    2) 依存関係のないPercona56パッケージを削除します:

    rpm -e --nodeps Percona-Server-shared-56 Percona-Server-client-56 Percona-Server-server-56

    3) Percona57パッケージをインストールする

    yum install Percona-Server-shared-57 Percona-Server-client-57 Percona-Server-server-57

    4) ポート3306でリッスンしているプロセスがないことを確認し、プロセスを強制終了します。

    netstat -tulpn | grep 3306

    5) MySQLサービスを開始します:

    service mysql start

    6) MySQLテーブルのアップグレード:

    mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`

    ステージ5–アップグレードの完了

    これで、システムはPercona 5.7を実行し、アプリケーションから完全にアクセスできるようになります。この段階で、データベースを使用するサイトまたはアプリケーションをテストし、エラーを調査する必要があります。


    1. LOADDATAINFILEを使用してCSVファイルからMySQLデータベースに選択した列を挿入する方法

    2. PostgreSQLレプリケーションのベストプラクティス-パート2

    3. Oracleに対して実行されたクエリを確認するにはどうすればよいですか?

    4. SQL ServerのDATEDIFF()とDATEDIFF_BIG():違いは何ですか?