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

MySQLまたはMariaDBサーバーの本番環境への準備-パート1-

    長期的に操作をスムーズにするために必要なパッケージとツールを使用して、実稼働MySQLサーバーをインストールおよび構成することは非常に重要です。問題の特定と解決に役立つ必要なツールがサーバーにインストールされていないため、運用サーバー(特にパブリックインターネットアクセスのないサーバー)のトラブルシューティングや調整が一般的に困難な場合が多くあります。

    この2部構成のブログシリーズでは、システム管理者の観点から、実稼働環境で使用するためにMySQLサーバーを準備する方法に関する9つのヒントとコツを紹介します。このブログ投稿のすべての例は、CentOS7で実行されている2ノードのマスタースレーブMySQLレプリケーションセットアップに基づいています。

    必須パッケージのインストール

    MySQLまたはMariaDBクライアントおよびサーバーパッケージのインストール後、MySQL / MariaDBサーバーに、これから行われるすべての管理、管理、および監視操作に対処するために必要なすべてのツールを準備する必要があります。サーバー。本番環境でMySQLサーバーをロックダウンすることを計画している場合、インターネットに接続せずにすべてを手動でインストールするのは少し難しくなります。

    Linux用のMySQL/MariaDBサーバーにインストールする必要のある重要なパッケージのいくつか:

    • Percona Xtrabackup /MariaDBBackup-データベースサーバーのノンブロッキング物理バックアップ。
    • ntp/ntpdate-同期サーバーの時刻。
    • pv-パイプラインを介してデータを監視します。スロットルにも使用できます。
    • socatまたはnetcat-データストリーミングツール。ストリーミングバックアップに適しています。
    • net-tools-Linux用のネットワークデバッグツールのコレクション。
    • bind-utils-Linux用のDNSデバッグツールのコレクション。
    • sysstat-Linux用のパフォーマンス監視ツールのコレクション。
    • telnet-サービスの到達可能性をチェックするTelnetクライアント。
    • mailx/mailutils-MTAクライアント。
    • openssl-トランスポート層セキュリティ(TLS)およびセキュアソケット層(SSL)プロトコル用のツールキット。
    • unzip-解凍ツール。
    • htop-ホスト監視ツール。
    • innotop-MySQL監視ツール。
    • vim-構文が強調表示されたテキストエディタ(または任意のテキストエディタ)。
    • python-setuptools-Pythonパッケージマネージャー。
    • lm_sensors/ipmitool-サーバーコンポーネントの温度を確認します。ベアメタルサーバーのみ。

    提案されたパッケージのいくつかは、CentOS用のEPELのようなデフォルト以外のパッケージリポジトリでのみ利用可能であることに注意してください。したがって、YUMベースのインストールの場合:

    $ yum install epel-release
    $ yum install -y wget ntp pv socat htop innotop vim mailx bind-utils net-tools telnet sysstat openssl python-setuptools lm_sensors ipmitool

    APTベースのインストールの場合:

    $ apt-get install ntp pv socat htop innotop vim easy_install mailutils bind-utils sysstat net-tools telnet openssl lm_sensors ipmitool

    MySQLコマンドラインインターフェイスの場合、オートコンプリートと構文の強調表示を備えた、mycliなどの標準の「mysql」コマンドラインクライアント以外の別のツールを使用できます。パッケージをインストールするには、pip(Pythonパッケージマネージャー)を使用できます:

    $ pip install mycli

    mycliを使用すると、次のスクリーンショットに示すように、本番サーバーを処理する際の視覚化が向上し、ヒューマンエラーのベクトルを減らすことができます。

    意味のあるシェルプロンプト

    この部分はそもそも不要に見えますが、おそらく制作でばかげた間違いをすることからあなたを救うでしょう。人間として、特に本番サーバーがダウンしているときなど、激しい瞬間に破壊的なコマンドを実行すると、エラーが発生する傾向があります。

    次のスクリーンショットをご覧ください。デフォルトでは、bash PS1プロンプト(プライマリプロンプト)はかなり鈍く見えます:

    優れたPS1プロンプトは、SysAdminsが現在処理している環境、サーバー、および現在のパス。その結果、より注意深く、コマンドを実行するのに正しいパス/サーバー/ユーザーにあるかどうかを常に知ることができます。

    これを実現するには、PS1(プライマリプロンプト)構成を説明する行を見つけます。通常は/ etc/bashrcの41行目です。

      [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[email protected]\h \W]\\$ "

    そして、次の行に置き換えます:

      [ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[\[\e[36m\]\u\[\e[m\]@\[\e[32m\]\h\[\e[m\]\[\e[31;47m\]Production\[\e[m\]: \[\e[33m\]\w\[\e[m\]]$ "

    ターミナルからログアウトし、再度ログインします。ターミナルに次のようなものが表示されるはずです:

    上のスクリーンショットに示されているように、現在のユーザー(青)、サーバーのホスト名(緑)、生産層(赤で太字、背景は白)、および現在のディレクトリのフルパス(黄色)は、重要な情報をさまざまな色で簡単に区別できる現在のセッションのより良い要約を提供します。

    この無料のオンラインツールを使用して、好みに合わせてbashプロンプトをカスタマイズできます。

    MOTD

    MySQLやMariaDBレプリケーションなど、複数の役割を持つデータベースクラスターを管理している場合、ホストの1つを直接管理するときに、追加のチェックを実行して確認する必要があるため、常にこのような不安を感じることがよくあります。私たちがいるノードは、私たちが本当に管理したいノードです。データベースクラスターがスケールアウトするにつれて、レプリケーショントポロジはより複雑になる傾向があり、中間マスター、binlogサーバー、半同期レプリケーションを備えたバックアップマスター、読み取り専用スレーブ、バックアップ検証サーバーなど、クラスター内に多くの役割が存在する可能性があります。

    >

    その特定のサーバーにいるときはいつでもデータベースの状態の要約を取得できれば、何を処理するのかを知ることができれば、はるかに良いでしょう。 LinuxのMessageofthe Day(MOTD)を利用して、サーバーにログインするたびにこの動作を自動化できます。デフォルトの/etc/ motdを使用することは、静的コンテンツにのみ有効です。これは、MySQLサーバーの現在の状態を報告する場合に実際に必要なことではありません。

    同様の結果を達成するために、単純なBashスクリプトを使用して、MySQL / MariaDBサーバーを要約する意味のあるMOTD出力を生成できます。例:

    $ vim ~/.motd.sh
    #!/bin/bash
    # Auto-generate MOTD for MySQL/MariaDB Replication
    # .motd.sh, to be executed under ~/.bash_profile
    
    #####
    # Preferred role of the node, pick one
    #PREFER_ROLE='Slave'
    PREFER_ROLE='Master'
    #####
    
    HOSTNAME=$(hostname)
    UPTIME=$(uptime -p)
    MYSQL_COMMAND='mysql --connect-timeout=2 -A -Bse'
    MYSQL_READONLY=$(${MYSQL_COMMAND} 'SHOW GLOBAL VARIABLES LIKE "read_only"' | awk {'print $2'})
    TIER='Production'
    MAIN_IP=$(hostname -I | awk {'print $1'})
    CHECK_MYSQL_REPLICATION=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Slave_.*_Running: Yes$')
    MYSQL_MASTER=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | grep Master_Host | awk {'print $2'})
    # The following requires show_compatibility_56=1 for MySQL 5.7 and later
    MYSQL_UPTIME=$(${MYSQL_COMMAND} 'SELECT TIME_FORMAT(SEC_TO_TIME(VARIABLE_VALUE ),"%Hh %im")  AS Uptime FROM information_schema.GLOBAL_STATUS WHERE VARIABLE_NAME="Uptime"')
    
    # coloring
    bold=$(tput bold)
    red=$(tput setaf 1)
    green=$(tput setaf 2)
    normal=$(tput sgr0)
    
    MYSQL_SHOW=1
    if [ $MYSQL_READONLY == 'ON' ]; then
            CURRENT_MYSQL_ROLE='Slave'
            if ${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Slave_.*_Running: Yes$' &>/dev/null ; then
                    lag=$(${MYSQL_COMMAND} 'SHOW SLAVE STATUS\G' | egrep 'Seconds_Behind_Master:' | awk {'print $2'})
                    if [ $lag -eq 0 ]; then
                            REPLICATION_STATUS="${green}Healthy  "
                    else
                            if [ $lag == 'NULL' ]; then
                                    REPLICATION_STATUS=${red}Unhealthy
                            else
                                    REPLICATION_STATUS="${red}Lagging ${lag}s"
                            fi
                    fi
            else
                    REPLICATION_STATUS=${red}Unhealthy
            fi
    
    elif [ $MYSQL_READONLY == 'OFF' ]; then
            CURRENT_MYSQL_ROLE='Master'
            SLAVE_HOSTS=$(${MYSQL_COMMAND} 'SHOW SLAVE HOSTS' | awk {'print $1'})
    else
            MYSQL_SHOW=0
    fi
    
    if [ $TIER == 'Production' ]; then
            TIER=${green}Production
    fi
    
    if [ $PREFER_ROLE == $CURRENT_MYSQL_ROLE ]; then
            MYSQL_ROLE=${green}$CURRENT_MYSQL_ROLE
    else
            MYSQL_ROLE=${red}$CURRENT_MYSQL_ROLE
    fi
    
    echo
    echo "HOST INFO"
    echo "========="
    echo -e "  Hostname       : ${bold}$HOSTNAME${normal} \t Server Uptime  : ${bold}$UPTIME${normal}"
    echo -e "  IP Address       : ${bold}$MAIN_IP${normal} \t Tier           : ${bold}$TIER${normal}"
    echo
    if [ $MYSQL_SHOW -eq 1 ]; then
            echo "MYSQL STATE"
            echo "==========="
            echo -e "  Current role      : ${bold}$MYSQL_ROLE${normal} \t\t Read-only      : ${bold}$MYSQL_READONLY${normal}"
            echo -e "  Preferred role    : ${bold}$PREFER_ROLE${normal} \t\t DB Uptime      : ${bold}$MYSQL_UPTIME${normal}"
            if [ $CURRENT_MYSQL_ROLE == 'Slave' ]; then
                    echo -e "  Replication state : ${bold}$REPLICATION_STATUS${normal} \t Current Master : ${bold}$MYSQL_MASTER${normal}"
            else
                    echo -e "  Slave Hosts(s) ID : "
                    for i in $SLAVE_HOSTS; do
                            echo -e "      - ${bold}$i${normal} \t"; done
            fi
            echo
    fi

    8行目または9行目でマスターまたはスレーブのいずれかのMySQLロールを選択し、スクリプトを保存します。このスクリプトでは、データベースユーザーの資格情報を保存するためにMySQLオプションファイルが必要なので、最初に作成する必要があります:

    $ vim ~/.my.cnf

    そして、次の行を追加します:

    [client]
    user=root
    password='YourRootP4ssw0rd'
    パスワード部分を実際のMySQLルートパスワードに置き換えます。次に、実行可能ファイルのアクセス許可をスクリプトに適用します。

    $ chmod 755 ~/.motd.sh

    実行可能スクリプトが正しい出力を生成するかどうかをテストします:

    $ ~/.motd.sh

    出力が良好(エラーや警告なし)の場合は、スクリプトを〜/ .bash_profileに追加して、ユーザーがログインしたときに自動的に読み込まれるようにします。

    $ whoami
    root
    $ echo '~/.motd.sh' >> ~/.bash_profile

    ターミナルに再ログインすると、マスターに次のようなメッセージが表示されます。

    スレーブ上では、次のように表示されます。

    >

    このスクリプトは、単純なMySQL/MariaDB用に特別に作成されていることに注意してください-ティアマスタースレーブレプリケーション。より複雑なセットアップを使用している場合、またはGalera Cluster、Group Replication、NDB Clusterなどの他のMySQLクラスタリングテクノロジーを使用する場合は、おそらくスクリプトを変更する必要があります。アイデアは、ログインしたときにデータベースノードのステータスと情報を取得して、作業中のデータベースサーバーの現在の状態を認識できるようにすることです。

    センサーと温度

    この部分は、多くのシステム管理者によって一般的に無視されています。サーバーが過熱したときに予期しない動作をした場合に大きな驚きを感じたくないので、温度を監視することは非常に重要です。物理サーバーは通常、ボックス内に接着された何百もの電子部品で構成されており、温度変化に敏感です。 1つの冷却ファンが故障すると、CPU温度が急上昇してハード制限に達する可能性があります。これにより、最終的にCPUクロックが抑制され、データ処理パフォーマンス全体に影響を及ぼします。

    この目的のためにlm-sensorsパッケージを使用できます。インストールするには、次のようにします。

    $ yum install lm-sensors # apt-get install lm-sensors for APT

    次に、sensors-detectプログラムを実行して、lm_sensorsを最も効果的に使用するためにロードする必要のあるカーネルモジュールを自動的に決定します。

    $ sensors-detect

    すべての質問に回答します(通常、提案されたすべての回答を受け入れるだけです)。仮想マシンやコンテナなどの一部のホストは、このモジュールをサポートしていません。センサーは実際にはホスト(ベアメタル)レベルである必要があります。詳細については、このリストを確認してください。

    次に、sensorsコマンドを実行します:

    $ sensors
    i350bb-pci-0203
    Adapter: PCI adapter
    loc1:         +53.0°C (high = +120.0°C, crit = +110.0°C)
    
    power_meter-acpi-0
    Adapter: ACPI interface
    power1:        4.29 MW (interval =   1.00 s)
    
    coretemp-isa-0000
    Adapter: ISA adapter
    Package id 0:  +55.0°C (high = +85.0°C, crit = +95.0°C)
    Core 0:        +45.0°C (high = +85.0°C, crit = +95.0°C)
    Core 1:        +51.0°C (high = +85.0°C, crit = +95.0°C)
    Core 2:        +47.0°C (high = +85.0°C, crit = +95.0°C)
    Core 3:        +51.0°C (high = +85.0°C, crit = +95.0°C)
    Core 4:        +49.0°C (high = +85.0°C, crit = +95.0°C)
    Core 5:        +48.0°C (high = +85.0°C, crit = +95.0°C)
    Core 8:        +47.0°C (high = +85.0°C, crit = +95.0°C)
    Core 9:        +49.0°C (high = +85.0°C, crit = +95.0°C)
    Core 10:       +48.0°C (high = +85.0°C, crit = +95.0°C)
    Core 11:       +48.0°C (high = +85.0°C, crit = +95.0°C)
    Core 12:       +46.0°C (high = +85.0°C, crit = +95.0°C)
    Core 13:       +49.0°C (high = +85.0°C, crit = +95.0°C)
    
    coretemp-isa-0001
    Adapter: ISA adapter
    Package id 1:  +53.0°C (high = +85.0°C, crit = +95.0°C)
    Core 0:        +46.0°C (high = +85.0°C, crit = +95.0°C)
    Core 1:        +48.0°C (high = +85.0°C, crit = +95.0°C)
    Core 2:        +47.0°C (high = +85.0°C, crit = +95.0°C)
    Core 3:        +45.0°C (high = +85.0°C, crit = +95.0°C)
    Core 4:        +46.0°C (high = +85.0°C, crit = +95.0°C)
    Core 5:        +47.0°C (high = +85.0°C, crit = +95.0°C)
    Core 8:        +47.0°C (high = +85.0°C, crit = +95.0°C)
    Core 9:        +45.0°C (high = +85.0°C, crit = +95.0°C)
    Core 10:       +45.0°C (high = +85.0°C, crit = +95.0°C)
    Core 11:       +46.0°C (high = +85.0°C, crit = +95.0°C)
    Core 12:       +46.0°C (high = +85.0°C, crit = +95.0°C)
    Core 13:       +46.0°C (high = +85.0°C, crit = +95.0°C)

    上記の結果は、すべてのCPUコアとともに全体的なCPU温度を示しています。サーバーコンポーネントの全体的な状態を確認するために使用できるもう1つのツールは、ipmitoolです。インストールするには、次のようにします。

    $ yum -y install ipmitool

    次のコマンドを実行すると、サーバー内の物理コンポーネントの全体的な状態を確認できます。

    $ ipmitool sdr list full
    Inlet_Temp       | 20 degrees C   | ok
    PCIe_Inlet_Temp  | 37 degrees C   | ok
    Outlet_Temp      | 20 degrees C   | ok
    CPU0_VR_Temp     | 39 degrees C   | ok
    CPU1_VR_Temp     | 41 degrees C   | ok
    CPU0_Temp        | 55 degrees C   | ok
    CPU1_Temp        | 52 degrees C   | ok
    PCH_Temp         | 58 degrees C   | ok
    DIMMG0_Temp      | 35 degrees C   | ok
    DIMMG1_Temp      | 32 degrees C   | ok
    PSU0_Temp        | 0 degrees C    | ok
    PSU1_Temp        | 0 degrees C    | ok
    SYS_3.3V         | 3.30 Volts     | ok
    SYS_5V           | 5 Volts        | ok
    SYS_12V          | 12.10 Volts    | ok
    CPU0_VCORE       | 1.79 Volts     | ok
    CPU1_VCORE       | 1.79 Volts     | ok
    CPU0_DDR_VDD     | 1.23 Volts     | ok
    CPU1_DDR_VDD     | 1.23 Volts     | ok
    SYS_FAN1_Speed   | 4018 RPM   | ok
    SYS_FAN2_Speed   | 4116 RPM   | ok
    SYS_FAN3_Speed   | 4116 RPM   | ok
    SYS_FAN4_Speed   | 4116 RPM   | ok
    SYS_FAN5_Speed   | 4018 RPM   | ok
    SYS_FAN6_Speed   | 4116 RPM   | ok
    SYS_FAN7_Speed   | 4018 RPM   | ok
    SYS_FAN8_Speed   | 4116 RPM   | ok
    SYS_FAN9_Speed   | 4018 RPM   | ok
    SYS_FAN10_Speed  | 4116 RPM   | ok
    SYS_FAN11_Speed  | 4116 RPM   | ok
    SYS_FAN12_Speed  | 4116 RPM   | ok
    SYS_FAN13_Speed  | 4116 RPM   | ok
    SYS_FAN14_Speed  | 4214 RPM   | ok
    Airflow_rate     | 16 CFM     | ok
    PSU1_PIN         | 0 Watts    | ok
    PSU2_PIN         | 0 Watts    | ok
    PSU1_POUT        | 0 Watts    | ok
    PSU2_POUT        | 0 Watts    | ok
    PSU1_IIN         | 0 Amps     | ok
    PSU2_IIN         | 0 Amps     | ok
    PSU1_VIN         | 0 Volts    | ok
    PSU2_VIN         | 0 Volts    | ok
    CPU_Power        | 63 Watts   | ok
    MEM_Power        | 8 Watts    | ok
    Total_Power      | 0 Watts    | ok
    BP_Power         | 8 Watts    | ok
    FAN_Power        | 6 Watts    | ok
    MB_Power         | 0 Watts    | ok

    リストは長いですが、一目瞭然であり、サーバーコンポーネント全体の状態を監視できるはずです。一部のファンがフルスピードで動作しておらず、CPUの温度が上昇する場合があります。問題を解決するには、ハードウェアの交換が必要になる場合があります。

    インテリジェントプラットフォーム管理インターフェイス(IPMI)カーネルモジュールでは、マザーボードでベースボード管理コントローラー(BMC)を有効にする必要があることに注意してください。 dmesgを使用して、利用可能かどうかを確認します:

    $ dmesg | grep -i bmc
    [    8.063470] ipmi_si IPI0001:00: Found new BMC (man_id: 0x000000, prod_id: 0x02f3, dev_id: 0x20)

    それ以外の場合、このコントローラーが無効になっている場合は、サーバーのBIOS設定を確認してください。

    今のところ以上です。このブログシリーズのパート2では、バックアップツールの構成、ストレステスト、サーバーのロックダウンなど、残りの5つのトピックについて説明します。


    1. Oraclesqlの単一行関数

    2. 1つの列の複数の結果行を1つに連結し、別の列でグループ化します

    3. フィールド(レコードのIDではない)へのPostgreSQLシーケンスの作成

    4. スペースを含むOracleテーブルの列名