前言:
而今我们对“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优化