描述
在同一台服務器中安裝兩個MySQL數據庫。目的是為了配置主從分離,所以需要多安裝一台用於從數據庫。使用mysqld_multi啟動多個實例。
mysql官網下載 需要安裝的版本。
下載與安裝
在/usr/local/下創建mysqltemp(用於臨時下載數據庫安裝包)。
[root@localhost local]# cd /usr/local
[root@localhost local]# mkdir mysqltemp
[root@localhost local]# cd mysqltemp
[root@localhost mysql3307]# wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.28-linux-glibc2.12-i686.tar.gz
[root@localhost mysql3307]# tar -xvf mysql-5.7.28-linux-glibc2.12-i686.tar.gz
// 重命名解壓的文件為mysql,並移動mysql到/usr/local/mysql
[root@localhost mysql3307]# mv mysql-5.7.28-linux-glibc2.12-i686 /usr/local/mysql
下載、解壓和重命名之后,完整路徑是/usr/local/mysql。接下來進入mysql文件夾,創建data文件夾,並在data文件夾中創建3306、3307、log文件夾備用。在3306和3307文件夾中分別創建data、log、tmp文件夾備用。
[root@localhost mysql]# mkdir data
[root@localhost mysql]# cd data
[root@localhost data]# mkdir {3306,3307,log}
[root@localhost data]# cd 3306
[root@localhost 3306]# mkdir {data,log,tmp}
[root@localhost 3306]# cd ../3307
[root@localhost 3307]# mkdir {data,log,tmp}
配置
配置/etc/my.cnf文件
# vim /etc/my.cnf
使用以下配置
# 啟動多個mysql實例
[client]
default-character-set = utf8mb4
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /usr/local/mysql/data/log/mysqld_multi.log
[mysqld3306]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/usr/local/mysql/data/3306/data
port=3306
user=mysql
performance_schema = off
server_id=3306
socket=/tmp/mysql_3306.sock
MyISAM_buffer_pool_size = 32M #設置MyISAM 緩存大小
bind_address = 0.0.0.0 #設置監聽IP地址
skip-name-resolve = 0 #關閉DNS反向解析
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /usr/local/mysql/data/3306/log/slow.log
log-error = /usr/local/mysql/data/3306/log/error.log
binlog_format = mixed
log-bin = /usr/local/mysql/data/3306/log/mysql3306_bin
explicit_defaults_for_timestamp=true
lower_case_table_names = 1
[mysqld3307]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/usr/local/mysql/data/3307/data
port=3307
user=mysql
server_id=3307
performance_schema = off
MyISAM_buffer_pool_size = 32M #設置MyISAM 緩存大小
bind_address = 0.0.0.0 #設置監聽IP地址
skip-name-resolve = 0 #關閉DNS反向解析
socket=/tmp/mysql_3307.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /usr/local/mysql/data/3307/log/slow.log
log-error = /usr/local/mysql/data/3307/log/error.log
binlog_format = mixed
log-bin = /usr/local/mysql/data/3307/log/mysql3307_bin
explicit_defaults_for_timestamp=true
lower_case_table_names = 1
添加好配置文件之后,需要添加mysql用戶(如果沒有該用戶的話)
# groupadd mysql
# useradd -g mysql mysql
# chown -R mysql:mysql /usr/local/mysql
初始化數據庫
添加好配置之后,就可以初始化3306和3307的數據庫了。執行命令之后,會出現臨時密碼,這個密碼需要記住,用來首次登錄mysql數據庫。
# cd /usr/local/mysql
# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/3306/data
# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/3307/data
執行初始化命令,如果出現以下錯誤,則執行相應的安裝命令即可。
./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
// 根據相應的提示,選擇對應的安裝命令
yum install -y libaio.so.1
yum install -y libnuma.so.1
yum install --setopt=protected_multilib=false libnuma.so.1
初始化數據庫沒有出現異常,最后會看到以下信息,說明初始化數據庫成功,這也就是數據庫的臨時密碼。
[Note] A temporary password is generated for root@localhost: 3/MasxQll5u
[Note] A temporary password is generated for root@localhost: 8tqGMruu8d?l
可以進入到data里面看看數據庫有沒有初始化成功。
# cd /usr/local/mysql/data/3306/data/
# cd /usr/local/mysql/data/3307/data/
啟動
mysqld_multi多實例管理的基本命令
啟動全部實例
# /usr/local/mysql/bin/mysqld_multi start
查看全部實例狀態
# /usr/local/mysql/bin/mysqld_multi report
啟動單個實例
# /usr/local/mysql/bin/mysqld_multi start 3306
# /usr/local/mysql/bin/mysqld_multi start 3307
停止單個實例
# /usr/local/mysql/bin/mysqld_multi stop 3306
# /usr/local/mysql/bin/mysqld_multi stop 3307
查看單個實例狀態
# /usr/local/mysql/bin/mysqld_multi report 3306
# /usr/local/mysql/bin/mysqld_multi report 3307
使用命令,啟動兩個數據庫實例
# /usr/local/mysql/bin/mysqld_multi start
執行命令沒有報錯,我們可以看一下日志有沒有錯誤。
[root@localhost log]# cat /usr/local/mysql/data/log/mysqld_multi.log
mysqld_multi log file version 2.16; run: 二 4月 7 13:04:42 2020
Starting MySQL servers
為了確保兩個數據庫實例已經啟動,可以通過命令查看相應端口是否有進程。
# ps -ef | grep 3306
# ps -ef | grep 3307
或者查看相應的實例中的日志信息
# cat /usr/local/mysql/data/3307/log/error.log
# cat /usr/local/mysql/data/3307/log/error.log
登錄
以上都沒有錯誤,我們就可以登錄mysql進行修改密碼等配置了。
直接使用mysql -u root -p會報以下錯誤。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
所以要使用在配置文件中配置的sock地址mysql -S /tmp/mysql_3306.sock -p密碼,加上剛剛生成的臨時密碼。(其他配置可參考 CentOS7 環境配置(持續更新))
mysql -S /tmp/mysql_3306.sock -p3/MasxQll5u
// 設置密碼
mysql> set password=password('Root@123');
// 設置允許遠程登錄
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Root@123' WITH GRANT OPTION;
mysql> flush privileges;
mysql> show variables like '%character%';
mysql> show variables like "%case%";
3307數據庫同樣跟3306操作一樣。
mysql -S /tmp/mysql_3307.sock -p8tqGMruu8d?l
// 設置密碼
mysql> set password=password('Root@123');
// 設置允許遠程登錄
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Root@123' WITH GRANT OPTION;
mysql> flush privileges;
mysql> show variables like '%character%';
mysql> show variables like "%case%";
關閉數據庫,發現使用/usr/local/mysql/bin/mysqld_multi stop不能關閉。可以先查詢端口進程,然后用kill命令關閉。
# ps -ef | grep 3306
# kill -9 進程ID
以上,兩個數據庫實例已經配置並啟動成功。可以通過客戶端連接操作。如果需要配置讀寫分離,可以參考: SpringBoot 整合 MyCat 實現讀寫分離
參考文章:
