よく発生するビジネス シナリオは、複数のユニットがクラウド サーバーを共有し、個別のデータベースを使用するというものですが、結局のところ、提供されるリソースは限られているため、現時点では、この問題を解決するには 1 台のマシン上に複数の MySQL インスタンスが必要です。

1、MySQLユーザーアカウントを作成する

複数のデータベースで異なるアカウントとパスワードを作成できます。ここでは単に mysql ユーザーを例に挙げます。

groupadd mysql
useradd -g mysql -M -s /sbin/nologin mysql

2、MySQLをダウンロードしてインストールします

下载地址https://downloads.mysql.com/archives/community/

バイナリファイルを解凍し、指定したディレクトリに移動します

tar -xvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql

3、設定ファイルとデータディレクトリを作成する

3 つのデータ ディレクトリを作成する

mkdir -pv /data/{3006,3007,3008}/data
tree /data/
/data/
├── 3306
│   └── data
├── 3307
│   └── data
└── 3308
└── data

設定ファイルを作成する /data/3306/my.cnf /data/3307/my.cnf /data/3308/my.cnf

my.cnfの設定内容は以下の通りです

[mysql]
default-character-set = utfe
port = 3306
socket = /data/3306/mysql.sock
[mysqld]
user = mysql
log-bin = mysql-bin
port = 3306
socket = /data/3306/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3306/data
character-set-server = utf8
pid-file = /data/3306/mysql.pid
relay-log = /data/3306/relay-bin
relay-log-info-file = /data/3306/relay-log.info
# Server ID
server-id = 1
# gtid
gtid_mode = on
enforce-gtid-consistency = true
log-slave-updates = on
skip_slave_start = 1
# Relay.infoをデータテーブルに記録する
relay_log_info_repository = TABLE
# master.infoをデータテーブルに記録する
master_info_repository = TABLE
[mysqld_safe]
log-error = /data/3306/mysql_3306.err
pid-file = /data/3306/mysqld.pid

⚠️ 注意 他の 2 つのインスタンスにコピーし、ポート 3307 と 3308 の変更に注意してください。font color=red>server-id数字はずらして表示する必要があります

4、認可と初期化

Mysqlデータディレクトリのユーザー権限を追加する chown -R mysql:mysql /data

複数のインスタンスの初期化

cd /usr/local/mysql/bin
./mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
./mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/3307/data --user=mysql
./mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/3308/data --user=mysql
# 初期化中に出力される情報の最後の行の最後には、MySql のログイン パスワードが記載されていますので、必ず保存してください

5、MySQL 環境変数と systemd 管理を追加する

MySQL環境変数を追加する

echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
source /etc/profile

systemd管理を追加

cat > /etc/systemd/system/mysql-3306.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/mysql-3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/mysql-3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
[Install]
WantedBy=multi-user.target
EOF

6、起動時に自動開始サービスを開始して設定する

systemctl start mysql-3306.service
systemctl start mysql-3307.service
systemctl start mysql-3308.service
systemctl enable mysql-3306.service
systemctl enable mysql-3307.service
systemctl enable mysql-3308.service

7、データベースへのログイン

[root@localhost ~]#m mysql -S /data/3306/mysql.sock -u root -P 3306 -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.37-log MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement

⚠️ 注意 ログインパラメータに注意してください:

  • -S ソケットを使用しています
  • -h 127.0.0.1 や localhost などの IP を使用します
  • -u ログインユーザー名です
  • -P 単一インスタンスの場合はポート番号を指定する必要はありません。複数のインスタンスの場合はポート番号を指定する必要があります
  • -p パスワードパラメータを入力します(大文字と小文字が区別されることに注意してください。上記は大文字のP、これは小文字のpです)

初めて MySQL にログインする場合は、パスワードを変更する必要があります。変更しないと、データベースを操作する権限が得られません

データベースユーザーのログインパスワードを変更し、上記の操作に従います

mysql> set password for root@localhost = password( '123456' );
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql>quit
Bye
# 再度ログインしてデータベース操作を実行すると、正常に動作します
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)