01 MySQL 5.7 多实例单配置文件安装

1.创建mysql用户以及组

groupadd mysql 
useradd -r -g mysql -s /bin/false mysql

2.创建Mysql数据目录

mkdir -p /data/mysql/3306
mkdir -p /data/mysql/3307
mkdir -p /data/mysql/3308
chown -R mysql.mysql /data/

3.创建mysql logs目录

mkdir -p /logs/mysql/3306
mkdir -p /logs/mysql/3307
mkdir -p /logs/mysql/3308
mkdir -p /var/run/mysqld
chown -R mysql.mysql /logs/
chown -R mysql.mysql /var/run/mysqld

4.解压Mysql安装包

tar xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /
cd /
mv mysql-5.7.26-linux-glibc2.12-x86_64/ mysql
chown -R mysql.mysql /mysql

5.将Mysql加入环境变量

[root@mysqlmulti /]# . ~/.bash_profile 
[root@mysqlmulti /]# cat ~/.bash_profile 
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/mysql/bin
export PATH

6.初始化数据

cd /mysql/bin
./mysqld --initialize --user=mysql  --basedir=/mysql --datadir=/data/mysql/3306 --explicit_defaults_for_timestamp
./mysqld --initialize --user=mysql  --basedir=/mysql --datadir=/data/mysql/3307 --explicit_defaults_for_timestamp
./mysqld --initialize --user=mysql  --basedir=/mysql --datadir=/data/mysql/3308 --explicit_defaults_for_timestamp

7.修改配置文件

[root@mysqlmulti run]# cat /etc/my.cnf
[mysqld_multi]  
mysqld     = /mysql/bin/mysqld_safe  
mysqladmin = /mysql/bin/mysqladmin  
[mysqld3306]    
port = 3306  
server_id = 3306  
basedir =/mysql  
datadir =/data/mysql/3306  
log-bin=/data/mysql/3306/mysql-bin  
socket =/tmp/mysql3306.sock    
log-error =/logs/mysql/3306/mysqld3306.log  
pid-file =/var/run/mysqld/mysqld3306.pid  
[mysqld3307]    
port = 3307  
server_id = 3307  
basedir =/mysql  
datadir =/data/mysql/3307  
log-bin=/data/mysql/3307/mysql-bin  
socket =/tmp/mysql3307.sock    
log-error =/logs/mysql/3307/mysqld3307.log  
pid-file =/var/run/mysqld/mysqld3307.pid  
[mysqld3308]
port = 3308
server_id = 3308
basedir =/mysql          
datadir =/data/mysql/3308
log-bin=/data/mysql/3308/mysql-bin      
socket =/tmp/mysql3308.sock
log-error =/logs/mysql/3308/mysqld3308.log
pid-file =/var/run/mysqld/mysqld3308.pid
8.创建日志文件

touch /logs/mysql/3306/mysqld3306.log 
touch /logs/mysql/3307/mysqld3307.log 
touch /logs/mysql/3308/mysqld3308.log 
chown -R mysql.mysql /logs/

9.启动3306,3307,3308实例

mysqld_multi start 3306
mysqld_multi start 3307
mysqld_multi start 3308
10.访问3306、3307、3308实例,密码是第六步初始化数据生成的密码

mysql -uroot -p -S /tmp/mysql3306.sock
mysql -uroot -p -S /tmp/mysql3307.sock
mysql -uroot -p -S /tmp/mysql3308.sock
11.更改密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'wwwwww'; 
mysql> FLUSH PRIVILEGES;

12.查看多实例状态

[root@mysqlmulti bin]# mysqld_multi report
WARNING: Log file disabled. Maybe directory or file isn't writable?
mysqld_multi log file version 2.16; run: Sat Jul 13 23:38:27 2019
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is running

02 MySQL 5.7多实例多配置文件安装

本文旨在学习多实例多个cnf配置文件下的安装与配置。

本文中创建了3306、3307、3308三个实例。

1.创建mysql用户以及组

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

2.创建mysql数据目录

mkdir -p /data/{3306,3307,3308}/data
chown -R mysql.mysql /data/

3.创建mysql logs目录

mkdir -p /logs/{3306,3307,3308}
mkdir -p /logs/{3306,3307,3308}/redolog
mkdir -p /logs/{3306,3307,3308}/undolog
touch /logs/3306/mysqld3306.log 
touch /logs/3307/mysqld3307.log 
touch /logs/3308/mysqld3308.log 
chown -R mysql.mysql /logs/
mkdir -p /var/run/mysqld
chown -R mysql.mysql /var/run/mysqld

4.解压Mysql安装包

tar xvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /
cd /
mv mysql-5.7.26-linux-glibc2.12-x86_64/ mysql
chown -R mysql.mysql /mysql

5.将Mysql加入环境变量

[root@mysqlmulti /]# . ~/.bash_profile 
[root@mysqlmulti /]# cat ~/.bash_profile 
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin:/mysql/bin
export PATH

6.修改配置文件

修改/data/3306/my3306.cnf文件

[root@mysql57 3306]# cat my3306.cnf 
[client]
port = 3306
socket = /data/3306/mysql3306.sock
[mysql]
auto-rehash
[mysqld_safe]
log-error = /logs/3306/mysqld3306.log
pid-error = /data/3306/mysql3306.pid
[mysqld]
user = mysql
port = 3306
socket= /data/3306/mysql3306.sock
pid-file = /data/3306/mysql3306.pid
datadir = /data/3306/data
basedir = /mysql
skip_name_resolve = 1
skip-external-locking
max_connections = 3000
max_connect_errors = 10
transaction_isolation = READ-COMMITTED
interactive_timeout=86400
wait_timeout=86400
back_log=600
####cache###### 
table_open_cache=2000
thread_cache_size=500
query_cache_size=128M
query_cache_min_res_unit=128k
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=4M
join_buffer_size=2M
bulk_insert_buffer_size=16M
max_heap_table_size=64M
tmp_table_size=64M
###MyISAM####
key_buffer_size=64M
key_cache_block_size=4k
myisam_sort_buffer_size=2M
########innodb settings########
#innodb_page_size = 4k
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 1
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
#innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 50
#innodb_io_capacity = 4000
#innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_log_group_home_dir = /logs/3306/redolog/
innodb_undo_directory = /logs/3306/undolog/
innodb_undo_logs = 128
#innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 4M
######mysqld-5.7########
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
log_timestamps=system
transaction_write_set_extraction=MURMUR32
show_compatibility_56=on
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#skip-grant-tables

修改/data/3307/my3307.cnf文件

[root@mysql57 3307]# cat my3307.cnf 
[client]
port = 3307
socket = /data/3307/mysql3307.sock
[mysql]
auto-rehash
[mysqld_safe]
log-error = /logs/3307/mysqld3307.log
pid-error = /data/3307/mysql3307.pid
[mysqld]
user = mysql
port = 3307
socket= /data/3307/mysql3307.sock
pid-file = /data/3307/mysql3307.pid
datadir = /data/3307/data
basedir = /mysql
skip_name_resolve = 1
skip-external-locking
max_connections = 3000
max_connect_errors = 10
transaction_isolation = READ-COMMITTED
interactive_timeout=86400
wait_timeout=86400
back_log=600
####cache###### 
table_open_cache=2000
thread_cache_size=500
query_cache_size=128M
query_cache_min_res_unit=128k
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=4M
join_buffer_size=2M
bulk_insert_buffer_size=16M
max_heap_table_size=64M
tmp_table_size=64M
###MyISAM####
key_buffer_size=64M
key_cache_block_size=4k
myisam_sort_buffer_size=2M
########innodb settings########
#innodb_page_size = 4k
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 1
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
#innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 50
#innodb_io_capacity = 4000
#innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_log_group_home_dir = /logs/3307/redolog/
innodb_undo_directory = /logs/3307/undolog/
innodb_undo_logs = 128
#innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 4M
######mysqld-5.7########
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
log_timestamps=system
transaction_write_set_extraction=MURMUR32
show_compatibility_56=on
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#skip-grant-tables

修改/data/3308/my3308.cnf文件

[root@mysql57 3308]# cat my3308.cnf 
[client]
port = 3308
socket = /data/3308/mysql3308.sock
[mysql]
auto-rehash
[mysqld_safe]
log-error = /logs/3308/mysqld3308.log
pid-error = /data/3308/mysql3308.pid
[mysqld]
user = mysql
port = 3308
socket= /data/3308/mysql3308.sock
pid-file = /data/3308/mysql3308.pid
datadir = /data/3308/data
basedir = /mysql
skip_name_resolve = 1
skip-external-locking
max_connections = 3000
max_connect_errors = 10
transaction_isolation = READ-COMMITTED
interactive_timeout=86400
wait_timeout=86400
back_log=600
####cache###### 
table_open_cache=2000
thread_cache_size=500
query_cache_size=128M
query_cache_min_res_unit=128k
sort_buffer_size=2M
read_buffer_size=2M
read_rnd_buffer_size=4M
join_buffer_size=2M
bulk_insert_buffer_size=16M
max_heap_table_size=64M
tmp_table_size=64M
###MyISAM####
key_buffer_size=64M
key_cache_block_size=4k
myisam_sort_buffer_size=2M
########innodb settings########
#innodb_page_size = 4k
innodb_buffer_pool_size = 1G
innodb_buffer_pool_instances = 1
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
#innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 50
#innodb_io_capacity = 4000
#innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_log_group_home_dir = /logs/3308/redolog/
innodb_undo_directory = /logs/3308/undolog/
innodb_undo_logs = 128
#innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 4M
######mysqld-5.7########
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
log_timestamps=system
transaction_write_set_extraction=MURMUR32
show_compatibility_56=on
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#skip-grant-tables

6.初始化数据

cd /mysql/bin
[root@mysql57 bin]# ./mysqld --initialize --user=mysql  --basedir=/mysql --datadir=/data/3306/data --explicit_defaults_for_timestamp
2019-07-15T11:51:33.672753Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-07-15T11:51:33.809864Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-07-15T11:51:33.883915Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: e497ef6e-a6f6-11e9-8d94-080027704b98.
2019-07-15T11:51:33.923591Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-07-15T11:51:33.924124Z 1 [Note] A temporary password is generated for root@localhost: dxg4gx7od_0Y
[root@mysql57 bin]# ./mysqld --initialize --user=mysql  --basedir=/mysql --datadir=/data/3307/data --explicit_defaults_for_timestamp
2019-07-15T12:04:40.909570Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-07-15T12:04:41.109548Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-07-15T12:04:41.189840Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: b9dd499e-a6f8-11e9-aafd-080027704b98.
2019-07-15T12:04:41.191921Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-07-15T12:04:41.192590Z 1 [Note] A temporary password is generated for root@localhost: yhFw?#fPl2&N
[root@mysql57 bin]# ./mysqld --initialize --user=mysql  --basedir=/mysql --datadir=/data/3308/data --explicit_defaults_for_timestamp
2019-07-15T12:14:45.071994Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-07-15T12:14:45.286324Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-07-15T12:14:45.373528Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 21fc66ed-a6fa-11e9-a44b-080027704b98.
2019-07-15T12:14:45.375971Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-07-15T12:14:45.376668Z 1 [Note] A temporary password is generated for root@localhost: u9;Cqar8>gaP

7.启动mysql,在/data/3306下创建mysql脚本,内容如下:

[root@mysql57 3306]# cat mysql
#!/bin/sh
port=3306
mysql_user="root"
mysql_pwd="wwwwww"
CmdPath="/mysql/bin"
mysql_sock="/data/${port}/mysql3306.sock"
#start Mysql Services
function_start_mysql()
{
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...\n"
      /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my3306.cnf 2>&1 > /dev/null &
    else
      printf "MySQL is running...\n"
      exit
    fi
}
#stop Mysql Services
function_stop_mysql()
{
    if [ ! -e "$mysql_sock" ];then
       printf "MySQL is stopped...\n"
       exit
    else
       printf "Stoping MySQL...\n"
       ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql3306.sock shutdown
   fi
}
#restart Mysql Services
function_restart_mysql()
{
    printf "Restarting MySQL...\n"
    function_stop_mysql
    sleep 2
    function_start_mysql
}
case $1 in
start)
    function_start_mysql
;;
stop)
    function_stop_mysql
;;
restart)
    function_restart_mysql
;;
*)
    printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
esac

分别在/data/3307和/data/3308下也创建类似mysql,需要需要里面3306为3307或3308

执行命令启动3306、3307、3308实例

[root@mysql57 bin]# /data/3306/mysql start
MySQL is running...
[root@mysql57 bin]# /data/3307/mysql start
MySQL is running...
[root@mysql57 bin]# /data/3308/mysql start
MySQL is running...

8.访问3306、3307、3308实例,密码是第六步初始化数据生成的密码

mysql -uroot -p -S /data/3306/mysql3306.sock
mysql -uroot -p -S /data/3307/mysql3307.sock
mysql -uroot -p -S /data/3308/mysql3308.sock

9.更改密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'wwwwww'; 
mysql> FLUSH PRIVILEGES;

10.查看多实例状态

[root@mysql57 ~]# ps -ef | grep mysqld | grep -v grep
root      6832     1  0 20:00 pts/1    00:00:00 /bin/sh /mysql/bin/mysqld_safe --defaults-file=/data/3306/my3306.cnf
mysql     7594  6832  0 20:00 pts/1    00:00:03 /mysql/bin/mysqld --defaults-file=/data/3306/my3306.cnf --basedir=/mysql --datadir=/data/3306/data --plugin-dir=/mysql/lib/plugin --user=mysql --log-error=/logs/3306/mysqld3306.log --pid-file=/data/3306/mysql3306.pid --socket=/data/3306/mysql3306.sock --port=3306
root      7810     1  0 20:13 pts/2    00:00:00 /bin/sh /mysql/bin/mysqld_safe --defaults-file=/data/3307/my3307.cnf
mysql     8572  7810  1 20:13 pts/2    00:00:06 /mysql/bin/mysqld --defaults-file=/data/3307/my3307.cnf --basedir=/mysql --datadir=/data/3307/data --plugin-dir=/mysql/lib/plugin --user=mysql --log-error=/logs/3307/mysqld3307.log --pid-file=/data/3307/mysql3307.pid --socket=/data/3307/mysql3307.sock --port=3307
root      8892     1  0 20:20 pts/5    00:00:00 /bin/sh /mysql/bin/mysqld_safe --defaults-file=/data/3308/my3308.cnf
mysql     9654  8892  5 20:20 pts/5    00:00:05 /mysql/bin/mysqld --defaults-file=/data/3308/my3308.cnf --basedir=/mysql --datadir=/data/3308/data --plugin-dir=/mysql/lib/plugin --user=mysql --log-error=/logs/3308/mysqld3308.log --pid-file=/data/3308/mysql3308.pid --socket=/data/3308/mysql3308.sock --port=3308
[root@mysql57 3308]# netstat -unltp | grep 3306 
tcp6       0      0 :::3306                 :::*                    LISTEN      7594/mysqld         
[root@mysql57 3308]# netstat -unltp | grep 3307
tcp6       0      0 :::3307                 :::*                    LISTEN      8572/mysqld         
[root@mysql57 3308]# netstat -unltp | grep 3308
tcp6       0      0 :::3308                 :::*                    LISTEN      9654/mysqld

11.停止mysql

[root@mysql57 3308]# /data/3306/mysql stop && /data/3307/mysql stop && /data/3308/mysql stop
Stoping MySQL...
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Stoping MySQL...
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
Stoping MySQL...
mysqladmin: [Warning] Using a password on the command line interface can be insecure.