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
Mysqlを解凍し、/usr/local/mysqlディレクトリに移動
bash
tar -zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz
Mysqlデータを保存するためのディレクトリを作成
ここではルートディレクトリに配置 その中にdataとlogディレクトリを作成
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
グローバルアクセスを設定
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ファイルで確認
パスワードを変更
他の操作を行う前にパスワードを変更する必要があります。そうしないと、以下のエラーが発生します。
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;
リモートアクセス
クラウドサーバーの場合、セキュリティグループのインバウンドルールも設定する必要があります
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
bin-logの有効期限を設定し忘れた場合、以下のコマンドで7日以上前のログを削除できます
bash
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY);