MySQL 5.7--------多实例部署最佳实战

1. 背景

MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。各个实例之间是相互独立的,每个实例的datadir, port, socket, pid都是不同的。

2. 多实例特点

* 有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

* 资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降。

3. 环境 [ 关闭SeLinux ]

[[email protected] ~]# cat /etc/redhat-release 
CentOS release 6.9 (Final)

[[email protected] ~]# uname -r
2.6.32-696.3.2.el6.x86_64

[[email protected] ~]# getenforce 
Disabled

4. 部署 [ 4个实例 ]

* 下载 MySQL 5.7 二制包 [ 推荐官方下载 ] 此下载版本大于5.7.5

[[email protected] ~]# wget wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

* 解压 MySQL 5.7 二进制包到指定目录

[[email protected] ~]# tar zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/

* 创建 MySQL 软链接

[[email protected] ~]# ln -s /usr/local/mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/mysql

* 创建 MySQL 用户

[[email protected] ~]# useradd -r -s /sbin/nologin mysql

* 在 MySQL 二进制包目录中创建 mysql-files 目录 [MySQL 数据导入/导出数据专放目录]

[[email protected] ~]# mkdir -v /usr/local/mysql/mysql-files
mkdir: created directory `/usr/local/mysql/mysql-files‘

* 创建多实例数据目录

[[email protected] ~]# mkdir -vp /data/mysql_data{1..4}
mkdir: created directory `/data‘
mkdir: created directory `/data/mysql_data1‘
mkdir: created directory `/data/mysql_data2‘
mkdir: created directory `/data/mysql_data3‘
mkdir: created directory `/data/mysql_data4‘

* 修改 MySQL 二进制包目录的所属用户与所属组

[[email protected] ~]# chown root.mysql -R /usr/local/mysql-5.7.18-linux-glibc2.5-x86_64

* 修改 MySQL 多实例数据目录与 数据导入/导出专放目录的所属用户与所属组

[[email protected] ~]# chown mysql.mysql -R /usr/local/mysql/mysql-files /data/mysql_data{1..4}

* 配置 MySQL 配置文件 /etc/my.cnf

[mysqld_multi]
mysqld     = /usr/local/mysql/bin/mysqld   
mysqladmin = /usr/local/mysql/bin/mysqladmin
log        = /tmp/mysql_multi.log

[mysqld1]
# 设置数据目录 [多实例中一定要不同]
datadir = /data/mysql_data1
# 设置sock存放文件名 [多实例中一定要不同]
socket = /tmp/mysql.sock1
# 设置监听开放端口 [多实例中一定要不同]
port = 3306
# 设置运行用户
user = mysql
# 关闭监控
performance_schema = off
# 设置innodb 缓存大小
innodb_buffer_pool_size = 32M
# 设置监听IP地址
bind_address = 0.0.0.0
# 关闭DNS 反向解析
skip-name-resolve = 0

[mysqld2]
datadir = /data/mysql_data2
socket = /tmp/mysql.sock2
port = 3307
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
bind_address = 0.0.0.0
skip-name-resolve = 0

[mysqld3]
datadir = /data/mysql_data3
socket = /tmp/mysql.sock3
port = 3308
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
bind_address = 0.0.0.0
skip-name-resolve = 0

[mysqld4]
datadir = /data/mysql_data4
socket = /tmp/mysql.sock4
port = 3309
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
bind_address = 0.0.0.0
skip-name-resolve = 0

* 初始化各个实例 [ 初始化完成后会自带随机密码在输出日志中 ]

[[email protected] ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1
[[email protected] ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2
[[email protected] ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3
[[email protected] ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data4

* 各实例开启 SSL 连接

[[email protected] ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1
[[email protected] ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2
[[email protected] ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3
[[email protected] ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data4

* 复制多实例脚本到服务管理目录下 [ /etc/init.d/ ]

[[email protected] ~]# cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

* 添加脚本执行权限

[[email protected] ~]# chmod +x /etc/init.d/mysqld_multi

* 添加进service服务管理

[[email protected] ~]# chkconfig --add mysqld_multi

5. 启动测试

* 查个多实例状态

[[email protected] ~]# /etc/init.d/mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld1 is not running
MySQL server from group: mysqld2 is not running
MySQL server from group: mysqld3 is not running
MySQL server from group: mysqld4 is not running

* 启动多实例

[[email protected] ~]# /etc/init.d/mysqld_multi start

* 查看多实例状态

Reporting MySQL servers
MySQL server from group: mysqld1 is running
MySQL server from group: mysqld2 is running
MySQL server from group: mysqld3 is running
MySQL server from group: mysqld4 is running

* 查看实例监听端口

[[email protected] ~]# netstat -lntp | grep mysqld
tcp        0      0 0.0.0.0:3306         0.0.0.0:*                LISTEN      2673/mysqld         
tcp        0      0 0.0.0.0:3307         0.0.0.0:*                LISTEN      2676/mysqld         
tcp        0      0 0.0.0.0:3308         0.0.0.0:*                LISTEN      2679/mysqld         
tcp        0      0 0.0.0.0:3309         0.0.0.0:*                LISTEN      2682/mysqld

6. 连接测试

  * 实例1

[[email protected] ~]# /usr/local/mysql/bin/mysql -S /tmp/mysql.sock1  -p‘z+Ilo*>s:3kw‘
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.18

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> set password = ‘123456‘;
Query OK, 0 rows affected (0.00 sec)

  * 实例2

[[email protected] ~]# /usr/local/mysql/bin/mysql -S /tmp/mysql.sock2  -p‘b*AHUrTgu1rl‘
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.18

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> set password = ‘123456‘;
Query OK, 0 rows affected (0.00 sec)

9. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

时间: 2024-12-19 11:20:28

MySQL 5.7--------多实例部署最佳实战的相关文章

mysql 5.5多实例部署

mysql5.5数据库多实例部署,我们可以分以下几个步骤来完成. 1. mysql多实例的原理 2. mysql多实例的特点 3. mysql多实例应用场景 4. mysql5.5多实例部署方法 一.mysql多实例的原理 mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程.这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务. 这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配

MySQL运维-多实例部署

MySQL多实例是在同一台数据库服务器上,通过开启多个不同的服务端口,并被对应的socket监听,以实现同时运行多个MySQL服务进程的目的. 实验环境使用<MySQL运维-单实例安装>部署成功后的实验环境mysql实例1安装目录:/data/3306mysql实例1数据文件目录:/data/3306/dbfilemysql实例2安装目录:/data/3307mysql实例2数据文件目录:/data/3307/dbfile 停止MySQL []# service mysqld stopShut

MySQL 5.6 多实例部署

1.安装MySQL # useradd -s /sbin/nologin -M mysql # tar -xvf mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz -C /usr/local # mv mysql-5.6.41-linux-glibc2.12-x86_64  mysql # chown -R mysql:mysql  /usr/local/mysql 2.配置多实例配置文件目录 # mkdir /data/{3306,3307}/data #

MYSQL的单机多实例部署

Centos6.6安装并配置单机多实例的MYSQL数据库 本文介绍安装单机多实例的MYSQL数据库的环境如下: 系统平台环境:Centos6.6 Mysql软件包:Mysql-5.5.32.tar.gz 一:安装MYSQL需要的依赖包和编译软件 #yum install ncurses-devel libaio-devel -y 二:安装编译MYSQL需要的软件(mysql5.2版本以后都需要使用cmake来编译安装MYSQL) #rpm -ivh cmake-2.8.12.2-4.el6.x8

Mysql 5.5多实例部署步骤

由于临时的需求,需要在一台主机上启动多个mysql的实例,对应不同的端口. 步骤如下: 1,安装mysql. 2,分别设置不同实例的配置文件. 3,创建不同实例的datadir,并执行数据库初始化. 4,启动不同的mysql实例. 以下是详细的安装方法: 1,安装mysql 使用源码安装. tar -zxvf mysql-5.5.49.tar.gz cd mysql-5.5.49 mkdir /usr/local/mysql cmake - -DCMAKE_INSTALL_PREFIX=/usr

mysql二进制安装,升级,多实例部署

目标 理解线上部署考虑的因素 学会编译安装以及二进制安装mysql 学会升级mysql 学会多实例部署mysql数据库 学会合理部署mysql线上库 考虑因素: 版本选择,5.1,5.5还是5.6? 分支选择,官方社区版?percona server?mariadb? 推荐官方版,简单易上手 安装方式,包安装?二进制包安装?源码安装? 线上推荐二进制包安装 路径配置,参数配置(尽量模板化,标准化) 一个实例多个库,or多个实例单个库? 二进制安装mysql 下载软件安装包 解压放到指定目录(比如

MySQL 5.7--------SSL连接最佳实战

                                                                                         MySQL 5.7--------SSL连接最佳实战 1. 背景 * 在生产环境下,安全总是无法忽视的问题,数据库安全则是重中之重,因为所有的数据都存放在数据库中 * 当使用非加密方式连接MySQL数据库时,在网络中传输的所有信息都是明文的,可以被网络中所有人截取,敏感信息可能被泄露.在传送敏感信息(如密码)时,可以采用

MySQL单机多实例部署

一.MySQL多实例部署 版本:5.7.18 1.软件安装 # tar xf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local # cd /usr/local # chown -R root.root mysql-5.7.18-linux-glibc2.5-x86_64 # ln -sv mysql-5.7.18-linux-glibc2.5-x86_64 mysql5.7.18 # mkdir /data/{mydata3307,m

MySQL单机多实例部署详解

一.mysql多实例的原理 mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程.这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务. 这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件.启动程序.数据文件.在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间根据配置文件的设定值,来取得服务器的相关硬件资源. 二.mysql多实例的特点 2.1 有效的利用服