龙空技术网

MySQL 5.7多实例安装部署

正能量大龄程序猿 113

前言:

而今我们对“mysql57优化”大致比较关心,看官们都需要学习一些“mysql57优化”的相关资讯。那么小编在网上收集了一些有关“mysql57优化””的相关内容,希望姐妹们能喜欢,姐妹们快快来学习一下吧!

MySQL 5.7多实例安装部署

一、mysql多实例的原理

mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程。这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务。

这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件。在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间根据配置文件的设定值,来取得服务器的相关硬件资源。

二、mysql多实例的特点

2.1 有效的利用服务器资源

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

2.2 节约服务器资源

当公司资金紧张,但是数据库需要各自提供独立服务,而且需要主从同步等技术时,使用多实例就最好了。

2.3 出现资源互相抢占问题

当某个实例服务并发很高或者有慢查询时,会消耗服务器更多的内存、CPU、磁盘IO等资源,这时就会导致服务器上的其它实例提供访问的质量下降,出现服务器资源互相抢占的现象。

三、mysql多实例应用场景

3.1 资金紧张型公司的选择

当公司业务访问量不太大,又舍不得花钱,但同时又希望不同业务的数据库服务各自独立,而且需要主从同步进行等技术提供备份或读写分离服务时,使用多实例是最好不过的。

3.2 并发访问不是特别大的业务

当公司业务访问量不太大,服务器资源基本闲置的比较多,这是就很适合多实例的应用。如果对SQL语句优化的好,多实例是一个很值得使用的技术。即使并发很大,只要合理分配好系统资源,也不会有太大问题。

四、mysql多实例部署方法

针对已经有单实例的服务器,我们先把它的注册的服务给去掉

systemctl |grep mysql 或者chkconfig --lis

我们注册的是mysqld.service ,去除掉

chkconfig --del mysqld

systemctl disable mysqld

rm /etc/rc.d/init.d/mysqld

systemctl daemon-reload

安装新版mysql前,需将系统自带的mariadb-lib卸载

[root@hadoop01 ~]# rpm -qa|grep mariadb

mariadb-libs-5.5.56-2.el7.x86_64

[root@hadoop01 ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

[root@hadoop01 ~]# rpm -qa|grep mariadb

解压安装包

tar -zxvf mysql-5.7.24-el7-x86_64.tar.gz

将该文件夹拷贝到/usr/local/下 并重命名为 mysql57

mv mysql-5.7.24-el7-x86_64 /usr/local/mysql57

在data下创建文件夹3306 3307 3308

mkdir /data

mkdir /data/3306

mkdir /data/3307

mkdir /data/3308

创建一个mysql 用户

useradd -r -s /sbin/nologin mysql

给目录授权限

chown -R mysql:mysql data/

chown -R mysql:mysql /usr/local/mysql57/

创建my.cnf 内容如下(放到/etc/下)

[mysqld_multi]

mysqld = /usr/local/mysql57/bin/mysqld_safe

mysqladmin = /usr/local/mysql57/bin/mysqladmin

log = /data/mysql_multi.log

user=root

[mysqld1]

basedir=/usr/local/mysql57

datadir=/data/3306

socket=/data/3306/mysql.sock

port=3306

symbolic-links=0

log-error=/data/3306/mysqld3306.log

pid-file=/data/3306/mysqld3306.pid

log_bin=mysql3306-bin

server_id=1

default-storage-engine=INNODB

character_set_server=utf8

user=mysql

#skip-grant-tables

[mysqld2]

basedir=/usr/local/mysql57

datadir=/data/3307

socket=/data/3307/mysql.sock

port=3307

symbolic-links=0

log-error=/data/3307/mysqld3307.log

pid-file=/data/3307/mysqld3307.pid

log_bin=mysql3307-bin

server_id=2

default-storage-engine=INNODB

character_set_server=utf8

user=mysql

#skip-grant-tables

[mysqld3]

basedir=/usr/local/mysql57

datadir=/data/3308

socket=/data/3308/mysql.sock

port=3308

symbolic-links=0

log-error=/data/3308/mysqld3308.log

pid-file=/data/3308/mysqld3308.pid

log_bin=mysql3308-bin

server_id=3

default-storage-engine=INNODB

character_set_server=utf8

user=mysql

#skip-grant-tables

初始化数据库

cd /usr/local/mysql57/bin

./mysqld --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3306

(产生临时密码VnjQtIEmW5<h)

./mysqld --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3307

(产生临时密码 =St97?7gekcR)

./mysqld --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3308

(产生临时密码 L&fF#1evGpu2)

各实例开启ssl连接

./mysql_ssl_rsa_setup --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3306

./mysql_ssl_rsa_setup --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3307

./mysql_ssl_rsa_setup --initialize --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3308

开启数据库

cd /usr/local/mysql57/bin

./mysqld_multi start

./mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld1 is running

MySQL server from group: mysqld2 is running

MySQL server from group: mysqld3 is running

登录上去修改密码1(使用初始化产生的临时密码登录):

./mysql -S /data/3306/mysql.sock -u root -p

ALTER USER user() IDENTIFIED BY '33061234';

flush privileges;

exit;

./mysql -S /data/3307/mysql.sock -u root -p

ALTER USER user() IDENTIFIED BY '33071234';

flush privileges;

exit;

./mysql -S /data/3308/mysql.sock -u root -p

ALTER USER user() IDENTIFIED BY '33081234';

flush privileges;

exit;

登录上去修改密码2(忘记了密码重置登录):

我们默认配置中设置了skip-grant-tables,可以直接登录上去(此方法是如果忘记了密码下实施)

./mysql -S /data/3306/mysql.sock -u root

update mysql.user set authentication_string=password('你要修改的密码') where user='root';

flush privileges;

exit;

./mysql -S /data/3306/mysql.sock -u root

update mysql.user set authentication_string=password('你要修改的密码') where user='root';

flush privileges;

exit;

./mysql -S /data/3308/mysql.sock -u root

update mysql.user set authentication_string=password('你要修改的密码') where user='root';

flush privileges;

exit;

再使用密码登录上去重置一次密码

./mysql -S /data/3306/mysql.sock -u root -p

ALTER USER user() IDENTIFIED BY '33061234';

flush privileges;

exit;

./mysql -S /data/3307/mysql.sock -u root -p

ALTER USER user() IDENTIFIED BY '33071234';

flush privileges;

exit;

./mysql -S /data/3308/mysql.sock -u root -p

ALTER USER user() IDENTIFIED BY '33081234';

flush privileges;

exit;

设置远程登录密码

[root@hadoop01 mysql-5.7]# mysql -u root -p

新创建用户:goodhope

创建用户:

create user 'goodhope@localhost' identified by '123456';

create user 'goodhope@%' identified by '123456';

删除用户:

drop user 'goodhope@%'

远程用户授权:

格式

 格式:grant privileges on databasename.tablename to 'username'@'host' IDENTIFIED BY 'PASSWORD';

grant all privileges on *.* to 'goodhope'@'%' identified by '123456' with grant option;

# 刷新表

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

# 退出MySQL

mysql> quit;

Bye

关闭数据库

[root@slave01 bin]# ./mysqld_multi stop 1

报错如下(查看mysql_multi log文件)

Stopping MySQL servers

mysqladmin: connect to server at 'localhost' failed

error: 'Access denied for user 'root'@'localhost' (using password: NO)'

多实例我们要在my.cof 中对用户和密码进行配置

我们在[mysqld_multi] 下添加(将3个实例的root密码都改成一样的如 123456,并使用他们在多实例中进行管理)

user=root

pass='123456'

[root@slave01 bin]# ./mysqld_multi stop 1

如果全部关闭 则 使用 ./mysqld_multi stop

设置开机启动

在mysql目录下创建一个sh文件

vi mysql_multi_start.sh

#!/bin/bash

export PATH=$PATH:/usr/local/mysql57/bin

/usr/local/mysql57/bin/mysqld_multi start 1,2,3

授权

chmod a+x mysql_multi_start.sh

编辑/etc/rc.d/rc.local添加

/usr/local/mysql57/mysql_multi_start.sh

授权

chmod a+x /etc/rc.d/rc.local

添加系统路径

将mysql的路径添加到系统路径中去

vi /etc/profile

export PATH=$PATH:/usr/local/mysql57/bin

另外针对my.conf默认是从/etc/my.cnf 下去读取的,如果我们的配置文件没有放到/etc 下,那么启动和关闭服务器时候要特别指定 比如

mysqld_multi –defaults-extra-file=/var/my.cnf report/stop/start

标签: #mysql57优化