MySQL多实例

    MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306/3307)同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。
    这些MySQL多实例共用一套MySQL安装程序,使用不同的my.conf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,他们根据配置文件对应设定值,获得服务器响应数量的资源。

MySQL多实例的优势与不足:

优点:

有效利用服务器资源

    当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离

节约服务器资源

    当公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且,需要主从复制等技术时,多实例就再好不过了
MySQL多实例有它的好处。

缺点:

    会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。

配置多实例两种方式

  1. 使用多个配置文件和启动文件,配置文件之间的区别:socket文件的位置、配置路径和数据存放位置不同。初始化的时候只用不同的配置文件进行初始化数据库,启动时使用不同的启动文件来启动,这种方法逻辑和配置简单,但是不方便管理。
  2. 根据官方提供的是通过mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理。

下面我们以第一种多实例的方法进行配置,后面会有单独的文章进行介绍mysqld_multi部署多实例。

安装MySQL数据库

环境描述

主机名称IP地址配置系统版本数据库版本实例端口
db-node1.devopssec.cn192.168.56.312核4GCentOS 7MySQL 5.6.373306,3307
1
2
3
4
5
6
[root@db-node1 ~]# systemctl status firewalld.service 
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
[root@db-node1 ~]# getenforce 
Disabled

下载源码包

官网下载地址:http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.34.tar.gz
MySQL源码包下载地址:链接:https://pan.baidu.com/s/1RIdIMUvfMAZWXXOymcqx0g 密码:jo14

创建软件目录

首先我们需要创建一下统一的软件(softwares)、脚本(scirpts)、备份(backup)

1
2
3
4
5
6
7
8
9
10
11
12
[root@db-node1 ~]# mkdir -p /data/{softwares,scirpts,backup}
[root@db-node1 ~]# tree /data
/data
├── backup
├── scirpts
└── softwares

3 directories, 0 files
[root@db-node1 ~]# cd /data/softwares/
# 目录创建完成之后,我们进入到/data/softwares/目录,将我们下载的mysql源码包放到该目录
[root@db-node1 softwares]# ls mysql-5.6.37.tar.gz 
mysql-5.6.37.tar.gz

 

安装依赖包

mysql的5.6编译安装需要使用cmake

1
[root@db-node1 softwares]# yum install -y make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel perl-Data-Dumper


接下来我们就可以编译安装MySQL数据库啦

 

编译MySQL数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@db-node1 softwares]# tar xf mysql-5.6.37.tar.gz
[root@db-node1 softwares]# cd mysql-5.6.37
[root@db-node1 mysql-5.6.37]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
> -DMYSQL_DATADIR=/usr/local/mysql/data \
> -DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \
> -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \
> -DENABLED_LOCAL_INFILE=ON \
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \
> -DWITH_FEDERATED_STORAGE_ENGINE=1 \
> -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
> -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
> -DWITH_FAST_MUTEXES=1 \
> -DWITH_ZLIB=bundled \
> -DENABLED_LOCAL_INFILE=1 \
> -DWITH_EMBEDDED_SERVER=1 \
> -DWITH_DEBUG=0
[root@db-node1 mysql-5.6.37]# make && make install
# 编译安装需要很长的时间,请耐性等待。
[root@db-node1 mysql-5.6.37]# ll /usr/local/mysql/
total 48
drwxr-xr-x  2 root root  4096 Sep  2 20:31 bin
-rw-r--r--  1 root root 17987 Jun  3  2017 COPYING
drwxr-xr-x  3 root root    17 Sep  2 20:30 data
drwxr-xr-x  2 root root    52 Sep  2 20:30 docs
drwxr-xr-x  3 root root  4096 Sep  2 20:30 include
drwxr-xr-x  3 root root  4096 Sep  2 20:30 lib
drwxr-xr-x  4 root root    28 Sep  2 20:30 man
drwxr-xr-x 10 root root  4096 Sep  2 20:31 mysql-test
-rw-r--r--  1 root root  2496 Jun  3  2017 README
drwxr-xr-x  2 root root    29 Sep  2 20:31 scripts
drwxr-xr-x 28 root root  4096 Sep  2 20:31 share
drwxr-xr-x  4 root root  4096 Sep  2 20:31 sql-bench
drwxr-xr-x  2 root root   130 Sep  2 20:31 support-files

设置环境变量

1
2
3
4
5
6
7
[root@db-node1 mysql-5.6.37]# ln -s /usr/local/mysql/scripts/mysql_install_db /usr/local/mysql/bin/
[root@db-node1 mysql-5.6.37]# echo 'export PATH="/usr/local/mysql/bin:$PATH"' >>/etc/profile
[root@db-node1 mysql-5.6.37]# tail -1 /etc/profile
export PATH="/usr/local/mysql/bin:$PATH"
[root@db-node1 mysql-5.6.37]# export PATH="/usr/local/mysql/bin:$PATH"
[root@db-node1 mysql-5.6.37]# mysql -V
mysql  Ver 14.14 Distrib 5.6.37, for Linux (x86_64) using  EditLine wrapper

部署多实例数据库

创建数据库目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@db-node1 mysql-5.6.37]# mkdir -p /data/dbdata/mysql_{3306,3307}/{etc,binlogs,innodb_data,innodb_logs,logs,mydata,relaylogs,socket,tmp}
[root@db-node1 mysql-5.6.37]# tree /data/dbdata/  
/data/dbdata/
├── mysql_3306
│   ├── binlogs
│   ├── etc
│   ├── innodb_data
│   ├── innodb_logs
│   ├── logs
│   ├── mydata
│   ├── relaylogs
│   ├── socket
│   └── tmp
└── mysql_3307
    ├── binlogs
    ├── etc
    ├── innodb_data
    ├── innodb_logs
    ├── logs
    ├── mydata
    ├── relaylogs
    ├── socket
    └── tmp

20 directories, 0 files

创建mysql用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@db-node1 mysql-5.6.37]# groupadd -g 8000 mysql
[root@db-node1 mysql-5.6.37]# useradd -u 8000 -g 8000 mysql
[root@db-node1 mysql-5.6.37]# id mysql
uid=8000(mysql) gid=8000(mysql) groups=8000(mysql)
[root@db-node1 mysql-5.6.37]# chown -R mysql.mysql /data/dbdata/mysql_3306/ /data/dbdata/mysql_3307/
[root@db-node1 mysql-5.6.37]# ll /data/dbdata/
total 0
drwxr-xr-x 11 mysql mysql 129 Sep  2 22:20 mysql_3306
drwxr-xr-x 11 mysql mysql 129 Sep  2 22:20 mysql_3307
[root@db-node1 mysql-5.6.37]# ll /data/dbdata/*
/data/dbdata/mysql_3306:
total 0
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 binlogs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 etc
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 innodb_data
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 innodb_logs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 logs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 mydata
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 relaylogs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 socket
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 tmp

/data/dbdata/mysql_3307:
total 0
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 binlogs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 etc
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 innodb_data
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 innodb_logs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 logs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 mydata
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 relaylogs
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 socket
drwxr-xr-x 2 mysql mysql 6 Sep  2 22:20 tmp

配置my.conf文件

创建3306实例配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
[root@db-node1 mysql-5.6.37]# cat /data/dbdata/mysql_3306/etc/my.cnf
[client]
port = 3306
socket = /data/dbdata/mysql_3306/socket/mysql.sock

[mysql]
no-auto-rehash

[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql/
datadir = /data/dbdata/mysql_3306/mydata
pid-file = /data/dbdata/mysql_3306/logs/mysqld.pid
socket = /data/dbdata/mysql_3306/socket/mysql.sock
tmpdir = /data/dbdata/mysql_3306/tmp
character_set_server = utf8
open_files_limit    = 1024
back_log = 600
max_connections = 800
max_connect_errors = 3000
table_open_cache = 614
external-locking = FALSE
max_allowed_packet =128M
sort_buffer_size = 1M
join_buffer_size = 1M
thread_cache_size = 100
thread_concurrency = 2
query_cache_size = 2M
query_cache_limit = 1M
query_cache_min_res_unit = 2k
thread_stack = 192K
tmp_table_size = 2M
max_heap_table_size = 2M

# 主从复制配置
server-id = 1
slow_query_log = 1
slow_query_log_file = /data/dbdata/mysql_3306/logs/slowq.log
long_query_time = 1
log-bin = /data/dbdata/mysql_3306/binlogs/mysql-bin
relay-log = /data/dbdata/mysql_3306/relaylogs/relay-bin
binlog_cache_size = 1M
max_binlog_cache_size = 1M
max_binlog_size = 512M
key_buffer_size = 16M
read_buffer_size = 1M
read_rnd_buffer_size = 1M
bulk_insert_buffer_size = 1M
lower_case_table_names = 1
skip-name-resolve
slave-skip-errors = 1032,1062

# innodb引擎配置
default_storage_engine = InnoDB
innodb_data_home_dir = /data/dbdata/mysql_3306/innodb_data
innodb_log_group_home_dir = /data/dbdata/mysql_3306/innodb_logs
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 128M
innodb_data_file_path = ibdata1:128M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 8
innodb_flush_log_at_trx_commit = 0
innodb_log_buffer_size = 32M
innodb_log_file_size = 128M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_support_xa = 0
innodb_file_per_table = 1
innodb_change_buffering = all
innodb_purge_threads = 1
innodb_read_io_threads = 6
innodb_write_io_threads = 6
innodb_io_capacity = 2000
innodb_file_format = Barracuda

[mysqldump]
quick
max_allowed_packet = 2M

[mysqld_safe]
log-error=/data/dbdata/mysql_3306/logs/error.log
pid-file=/data/dbdata/mysql_3306/logs/mysqld.pid

创建3307配置文件

这里我们直接拷贝3306的my.cnf文件

1
2
[root@db-node1 mysql-5.6.37]# cp /data/dbdata/mysql_3306/etc/my.cnf /data/dbdata/mysql_3307/etc/my.cnf
[root@db-node1 mysql-5.6.37]# sed -i 's#3306#3307#g' /data/dbdata/mysql_3307/etc/my.cnf

 

修改my.cnf权限

1
2
3
4
[root@db-node1 mysql-5.6.37]# chown mysql.mysql /data/dbdata/mysql_3306/etc/my.cnf /data/dbdata/mysql_3307/etc/my.cnf  
[root@db-node1 mysql-5.6.37]# ll /data/dbdata/mysql_3306/etc/my.cnf /data/dbdata/mysql_3307/etc/my.cnf
-rw-r--r-- 1 mysql mysql 2206 Sep  2 22:28 /data/dbdata/mysql_3306/etc/my.cnf
-rw-r--r-- 1 mysql mysql 2206 Sep  2 22:31 /data/dbdata/mysql_3307/etc/my.cnf

初始化数据库目录

初始化3306数据库目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[root@db-node1 mysql-5.6.37]# mysql_install_db --defaults-file=/data/dbdata/mysql_3306/etc/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/dbdata/mysql_3306/mydata
…………省略内容………………
[root@db-node1 mysql-5.6.37]# tree /data/dbdata/mysql_3306/ -L 2
/data/dbdata/mysql_3306/
├── binlogs
│   ├── mysql-bin.000001
│   ├── mysql-bin.000002
│   └── mysql-bin.index
├── etc
│   └── my.cnf
├── innodb_data
│   └── ibdata1
├── innodb_logs
│   ├── ib_logfile0
│   ├── ib_logfile1
│   └── ib_logfile2
├── logs
├── mydata
│   ├── mysql
│   ├── performance_schema
│   └── test
├── relaylogs
├── socket
└── tmp

初始化3307数据库目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@db-node1 mysql-5.6.37]# mysql_install_db --defaults-file=/data/dbdata/mysql_3307/etc/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/dbdata/mysql_3307/mydata
…………省略内容………………
[root@db-node1 mysql-5.6.37]# tree /data/dbdata/mysql_3307/ -L 2 
/data/dbdata/mysql_3307/
├── binlogs
│   ├── mysql-bin.000001
│   ├── mysql-bin.000002
│   └── mysql-bin.index
├── etc
│   └── my.cnf
├── innodb_data
│   └── ibdata1
├── innodb_logs
│   ├── ib_logfile0
│   ├── ib_logfile1
│   └── ib_logfile2
├── logs
├── mydata
│   ├── mysql
│   ├── performance_schema
│   └── test
├── relaylogs
├── socket
└── tmp

12 directories, 8 files

启动MySQL数据库

启动数据库需要指定数据库配置文件,我们先创建错误日志文件/data/dbdata/mysql_3306/logs/error.log/data/dbdata/mysql_3307/logs/error.log

1
2
3
4
5
6
7
8
9
10
11
12
[root@db-node1 mysql-5.6.37]# touch /data/dbdata/mysql_{3306,3307}/logs/error.log
[root@db-node1 mysql-5.6.37]# chown mysql.mysql /data/dbdata/mysql_{3306,3307}/logs/error.log
[root@db-node1 mysql-5.6.37]# ll /data/dbdata/mysql_{3306,3307}/logs/error.log
-rw-r--r-- 1 mysql mysql 0 Sep  2 22:45 /data/dbdata/mysql_3306/logs/error.log
-rw-r--r-- 1 mysql mysql 0 Sep  2 22:45 /data/dbdata/mysql_3307/logs/error.log
[root@db-node1 mysql-5.6.37]# mysqld_safe --defaults-file=/data/dbdata/mysql_3306/etc/my.cnf &
[1] 21129
[root@db-node1 mysql-5.6.37]# mysqld_safe --defaults-file=/data/dbdata/mysql_3307/etc/my.cnf & 
[2] 22026
[root@db-node1 mysql-5.6.37]# netstat -nlutp|grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      22000/mysqld        
tcp6       0      0 :::3307                 :::*                    LISTEN      22897/mysqld 

 

初始化数据库

在初始化事情我们先介绍一下数据登录方法

登录多实例数据库

  1. 指定socket文件登录,适合在本机连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@db-node1 mysql-5.6.37]# mysql -S /data/dbdata/mysql_3306/socket/mysql.sock 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.37-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

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> \q
Bye
  1. 指定ip地址和端口登录,适合远程连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@db-node1 mysql-5.6.37]# mysql -h 127.0.0.1 -P3306   
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.37-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

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> \q
Bye

初始化3306实例数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[root@db-node1 mysql-5.6.37]# mysqladmin -h 127.0.0.1 -P3306 -uroot password '123456'
Warning: Using a password on the command line interface can be insecure.
[root@db-node1 mysql-5.6.37]# mysqladmin -S /data/dbdata/mysql_3306/socket/mysql.sock -uroot password '123456'                       
Warning: Using a password on the command line interface can be insecure.
[root@db-node1 mysql-5.6.37]# mysql -S /data/dbdata/mysql_3306/socket/mysql.sock -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.37-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

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;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+------------------------+-------------------------------------------+
| user | host                   | password                                  |
+------+------------------------+-------------------------------------------+
| root | localhost              | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | db-node1.devopssec.cn |                                           |
| root | 127.0.0.1              | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1                    |                                           |
|      | localhost              |                                           |
|      | db-node1.devopssec.cn |                                           |
+------+------------------------+-------------------------------------------+
6 rows in set (0.00 sec)

mysql> drop user 'root'@'db-node1.devopssec.cn';
Query OK, 0 rows affected (0.00 sec)

mysql> drop user 'root'@'::1';
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'localhost';    
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'db-node1.devopssec.cn';    
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+
2 rows in set (0.00 sec) 

初始化3307实例数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[root@db-node1 mysql-5.6.37]# mysqladmin -h 127.0.0.1 -P3307 -uroot password '123456'
Warning: Using a password on the command line interface can be insecure.
[root@db-node1 mysql-5.6.37]# mysqladmin -S /data/dbdata/mysql_3307/socket/mysql.sock -uroot password '123456'                       
Warning: Using a password on the command line interface can be insecure.
[root@db-node1 mysql-5.6.37]# mysql -S /data/dbdata/mysql_3307/socket/mysql.sock -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.37-log Source distribution

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

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;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> drop database test;
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+------------------------+-------------------------------------------+
| user | host                   | password                                  |
+------+------------------------+-------------------------------------------+
| root | localhost              | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | db-node1.devopssec.cn |                                           |
| root | 127.0.0.1              | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | ::1                    |                                           |
|      | localhost              |                                           |
|      | db-node1.devopssec.cn |                                           |
+------+------------------------+-------------------------------------------+
6 rows in set (0.00 sec)

mysql> drop user 'root'@'db-node1.devopssec.cn';
Query OK, 0 rows affected (0.00 sec)

mysql> drop user 'root'@'::1';
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'localhost';    
Query OK, 0 rows affected (0.00 sec)

mysql> drop user ''@'db-node1.devopssec.cn';    
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host      | password                                  |
+------+-----------+-------------------------------------------+
| root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)

停止数据库

1
2
3
4
5
6
7
8
9
[root@db-node1 mysql-5.6.37]# mysqladmin -S /data/dbdata/mysql_3306/socket/mysql.sock -uroot -p shutdown
Enter password: 
180902 23:00:21 mysqld_safe mysqld from pid file /data/dbdata/mysql_3306/logs/mysqld.pid ended
[1]-  Done                    mysqld_safe --defaults-file=/data/dbdata/mysql_3306/etc/my.cnf
[root@db-node1 mysql-5.6.37]# mysqladmin -S /data/dbdata/mysql_3307/socket/mysql.sock -uroot -p shutdown
Enter password: 
180902 23:04:52 mysqld_safe mysqld from pid file /data/dbdata/mysql_3307/logs/mysqld.pid ended
[2]+  Done                    mysqld_safe --defaults-file=/data/dbdata/mysql_3307/etc/my.cnf
[root@db-node1 mysql-5.6.37]# netstat -nlutp|grep mysql

到此多实例数据库已经部署完成,以后想要部署3308或者其他端口的mysql数据库实例都可以参考上面的步骤进行部署

多实例启动脚本

根据我们之前的启动和停止数据库操作我们知道启动mysql数据使用mysqld_safe指定配置文件启动,停止数据库需要使用mysqladmin指定socket或者IP地址和端口已经用户名密码来进行关闭,注意这里不建议使用kill命令进行关闭数据库,接下我们开始创建mysql多实例数据库的启动、关闭以及重启脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
[root@db-node1 mysql-5.6.37]# cat /etc/init.d/mysqld 
#!/bin/bash
# ---------------------------------------------------------
# 脚本名称: mysqld.sh
# 描述信息: 
# 脚本版本: V0.1
# 脚本作者: albert
# 作者邮箱: devopssec@163.com
# 创建时间: 2018-08-26 10:45:28
# ---------------------------------------------------------

# 设置环境变量
if [ -z $2 ];then
    echo "Usage: $0 {start|stop|restart} <PORT>"
    exit
else
    MYPORT=$2
fi
MYDIR="/data/dbdata/mysql_${MYPORT}"
MYCNF="${MYDIR}/etc/my.cnf"
MYSOCKET="${MYDIR}/socket/mysql.sock"
BASEDIR="/usr/local/mysql"
MYSQLD_SAFE="${BASEDIR}/bin/mysqld_safe"
MYSQLADMIN="${BASEDIR}/bin/mysqladmin"
   # 用户必须指定并且有权限停止mysql数据库,可以不指定密码。如果用户有密码会在执行停止数据库是提示数据密码。
MYUSER="root"
MYPASSWD=""

# 启动数据库函数
function start_mysql() {
    if [ ! -e ${MYSOCKET} ];then
      echo "MySQL ${MYPORT} is Starting..."
      $MYSQLD_SAFE --defaults-file=${MYCNF} &>/dev/null &
    else
      echo "MySQL ${MYPORT} is Running..."
      exit
    fi
}
# 停止数据库函数
function stop_mysql(){
    if [ ! -e ${MYSOCKET} ];then
       echo "MySQL ${MYPORT} is Stopped..."
       exit
    else
       echo "MySQL ${MYPORT} is Stoping..."
       $MYSQLADMIN -S ${MYSOCKET} -u ${MYUSER} -p${MYPASSWD} shutdown
   fi
}

# 重启数据库函数
function restart_mysql(){
    echo "MySQL  ${MYPORT} Restarting..."
    stop_mysql
    sleep 2
    start_mysql
}

case $1 in
    start)
        start_mysql
    ;;
    stop)
        stop_mysql
    ;;
    restart)
        restart_mysql
    ;;
    *)
        echo  "Usage: $0 {start|stop|restart} <PORT>"
esac
[root@db-node1 mysql-5.6.37]# chmod +x /etc/init.d/mysqld 

 

启动数据库

1
2
3
4
[root@db-node1 mysql-5.6.37]# /etc/init.d/mysqld start 3306
MySQL 3306 is Starting...
[root@db-node1 mysql-5.6.37]# netstat -nlutp|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      51115/mysqld  

停止数据库

1
2
3
4
[root@db-node1 mysql-5.6.37]# /etc/init.d/mysqld stop 3306
MySQL 3306 is Stoping...
Enter password: 
[root@db-node1 mysql-5.6.37]# netstat -nlutp|grep 3306

停止数据库是需要数据数据库的密码

重启数据库

1
2
3
4
5
6
7
8
9
10
11
[root@db-node1 dbdata]# /etc/init.d/mysqld start 3306           
MySQL 3306 is Starting...
[root@db-node1 mysql-5.6.37]# netstat -nlutp|grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      52942/mysqld  
[root@db-node1 dbdata]# /etc/init.d/mysqld restart 3306
MySQL  3306 Restarting...
MySQL 3306 is Stoping...
Enter password: 
MySQL 3306 is Starting...
[root@db-node1 dbdata]# netstat -nlutp|grep mysql      
tcp6       0      0 :::3306                 :::*                    LISTEN      53847/mysqld  

多实例的选择

1、资金紧张性公司的选择 
  资金紧张,公司业务访问量又不大,但又希望不同的业务的数据库服务各自尽量独立 
2、并发访问不是特别大的业务 
  当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这就适合多实例的使用 
3、门户网站应用MySQL多实例场景
  配置硬件好的服务器,可以节省IDC机柜空间,跑多实例也不会减少硬件资源不慢的浪费 
  一般是从库多实例,例如:某部门使用IBM服务器为48核CPU,内存96GB、一台服务器跑3~4个实例;此外,在内网也是用的多实例,内存48GB左右。企业环境中一般将多实例应用在测试环境。

到此我们的多配置文件部署MySQL多实例已经完成啦

 

本文作者: 凌云
本文链接: https://www.devopssec.cn/2018/08/25/MySQL数据库-多配置文件部署多实例/

版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值