お待ちください...

小波Note

四川 · 成都市11 ℃
日本語

CentOS に Mysql 5.7 をインストールする

成都 (cheng du)2024/9/15 22:32:025.16k見積もり読書時間 17 分お気に入りCtrl + D / ⌘ + D
cover
IT FB(up 主)
バックエンド開発エンジニア
記事の要約
Github Copilot

記事の要約を読み込んでいます...

Mysql 5.7をダウンロード

MySQL
5.7
ダウンロード
bash
        cd /usr/local/src
wget xxx

    

システムに付属のMariadbをアンインストール

bash
        # mariadbが存在するか確認
rpm -qa|grep mariadb

# mariadbを削除
rpm -e --nodeps xxx

    

rpm mariad

Mysqlを解凍し、/usr/local/mysqlディレクトリに移動

bash
        tar -zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

    

Mysqlデータを保存するためのディレクトリを作成

ここではルートディレクトリに配置 その中にdataとlogディレクトリを作成

mysql dir

mysqlユーザーグループとユーザーを作成

bash
        groupadd mysql
useradd -g mysql mysql

    

mysqlディレクトリの所有者とグループを変更

bash
        chown -R mysql /usr/local/mysql/
chgrp -R mysql /usr/local/mysql/

    

/etc/my.cnfでmy.cnfを設定

注意すべき点は、mysql 5.7.18以降、tar.gzパッケージにはmysql-default.cnfファイルが含まれていないため、my.cnfを自分で作成する必要があることです。

以下は、mysqlが自動的にmy.cnfを認識できるデフォルトの場所です。

  • /etc/my.cnf グローバルオプション
  • /etc/mysql/my.cnf グローバルオプション
  • SYSCONFDIR/my.cnf グローバルオプション
  • $MYSQL_HOME/my.cnf サーバー固有のオプション(サーバーのみ)
  • defaults-extra-file --defaults-extra-fileを使用
  • 指定されたファイル(もしあれば)
  • ~/.my.cnf ユーザー固有のオプション
  • ~/.mylogin.cnf ユーザー固有のログインパスオプション(クライアントのみ)
my.cnf
        [client]
# ポート
port=3306

# ソケットファイル
socket=/mysql/mysql.sock

[mysql]
default-character-set=utf8mb4

[mysqld]
# サーバーID
server-id=1

# ポート
port=3306

# 文字セット
character-set-server=utf8mb4

# データベースインストールディレクトリ
basedir=/usr/local/mysql

# データベースデータ保存ディレクトリ
datadir=/mysql/data

# 一時ディレクトリ
tmpdir=/tmp

# ソケットファイル
socket=/mysql/mysql.sock

# バイナリログファイル
log-bin=/mysql/log/mysql-bin

# バイナリログ形式
binlog_format=ROW

# ログの有効期限、0は無期限
expire_logs_days=7

# バイナリログ対象データベース
#binlog-do-db=dbname

# バイナリログ無視データベース
#binlog-ignore-db=dbname

# スロークエリを有効にする
slow_query_log=1

# スロークエリログファイル
slow_query_log_file=/mysql/log/mysql-slow.log

# 5秒を超えるスロークエリを記録
long_query_time=5

# timestamp列のデフォルト値とNULL値
explicit_defaults_for_timestamp=1

# ログファイル
log-error=/mysql/log/mysql-error.log

# PIDファイル
pid-file=/mysql/mysql.pid

# SQLモード
#sql_mode=""

[mysqldump]
quick

    

データベースを初期化

bash
        ./bin/mysqld --initialize --user=mysql

    

mysqlシステムサービスを追加し、起動時に自動起動

bash
        # MySQLのサービススクリプトをシステムサービスに追加
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

# 実行権限を付与
chmod +x /etc/init.d/mysql

# mysqlサービスを追加
chkconfig --add mysql

# mysqlを起動時に自動起動
chkconfig --level 345 mysql on

# サービスリストを表示
chkconfig --list

    

chkconfig

グローバルアクセスを設定

bash
        # 方法1(推奨)
# /etc/profileに環境変数を設定
vim /etc/profile

export MYSQL_HOME=/usr/local/mysql
export PATH=$PATH:$MYSQL_HOME/bin:$MYSQL_HOME/lib

source /etc/profile

# 方法2
# シンボリックリンクを作成
ln -s /usr/local/mysql/bin/mysql /usr/bin

    

MySQLサービスの起動と停止

bash
        service mysql start
service mysql stop
service mysql restart
service mysql status

    

一時パスワードを確認

mysql-error.logファイルで確認

mysql-error.log

パスワードを変更

他の操作を行う前にパスワードを変更する必要があります。そうしないと、以下のエラーが発生します。 You must reset your password using ALTER USER statement before executing this statement.

bash
        ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
flush privileges;

    

alter pwd

リモートアクセス

クラウドサーバーの場合、セキュリティグループのインバウンドルールも設定する必要があります

bash
        # ポートを開放
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload

# 開放されているポートを確認
firewall-cmd --zone=public --list-ports

    

リモートログイン

bash
        # この方法では権限は変更されません
update mysql.user set host='%' where user='root' and host='localhost';
# または
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'test' WITH GRANT OPTION;

flush privileges;

    

データベースバックアップ

bash
        mysqldump -uroot -pxxx スクリプトにパスワードを入力すると、mysqlは安全でないと警告します
my.cnfの[mysqldump]に
user=root
password=xxx
を設定しておけば、パスワード入力を省略できます
-a -m -c はそれぞれaccess、modify、changeに対応
+/-  + 数字の後 - 数字以内
-mmin +/--mtime +/-例:-mmin +1 1分後

    
mysql_backup.sh
        #!/bin/bash

dir=/backup/mysql

# バックアップするデータベース
db_name=test

# バックアップ時間
time=$(date +'%Y-%m-%d_%H:%M:%S')

# ファイル名
file_name=mysql

mysqldump $backup_name --databases $db_name | gzip > $dir/$file_name'_'$db_name'_'$time.sql.gz

find $dir -name $file_name'_'$db_name'_*.sql.gz' -type f -mmin +1 -exec rm -rf {} \; >/dev/null

    

定期バックアップ

bash
        # 定期ジョブを作成
crontab -e
*/1 * * * * sh /sh/mysql_backup.sh

# 定期ジョブを確認
crontab -l

    

backup

bin-logの有効期限を設定し忘れた場合、以下のコマンドで7日以上前のログを削除できます

bash
        PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);