原文链接:https://blog.csdn.net/qq_21153619/article/details/81529880目录
1 MySQL多实例
一 、MySQL多实例介绍
1、什么是MySQL多实例
2、MySQL多实例的特点有以下几点
3、部署mysql多实例的两种方式
4、同一开发环境下安装多个数据库,必须处理以下问题
2 mysql多实例搭建
一、mysqld_multi搭建
1、下载免编译二进制包
2、解压和迁移
3、关闭iptables
4、关闭selinux
5、创建mysql系统用户和组
6、创建mysql目录
7、更改目录权限
8、添加环境变量
9、复制my.cnf文件到etc目录
10、修改my.cnf(在一个文件中修改即可)
11、 初始化数据库
13、设置启动文件
14、mysqld_multi进行多实例管理
15、修改密码
16、新建用户及授权
17、外部软件登录数据库
二、多配置文件搭建
1、安装包分发
2、卸载冗余数据库服务
3、安装数据库
4、启动mysql并查看状态
5、设置开机自启
6、设置初始密码
7、新建用户和修改权限
2 mysql集群搭建
一、mysql主从集群
1、建立siger用户并设置权限
2、修改配置文件
3、查看master状态
4、配置slave
5、启动从服务
6、查看slave状态
7、主从测试
1 MySQL多实例
一 、MySQL多实例介绍
1、什么是MySQL多实例
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307,3308),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。
2、MySQL多实例的特点有以下几点
- 有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
- 节约服务器资源
- 资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降;
3、部署mysql多实例的两种方式
第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;
第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理;
4、同一开发环境下安装多个数据库,必须处理以下问题
- 配置文件安装路径不能相同
- 数据库目录不能相同
- 启动脚本不能同名
- 端口不能相同
- socket文件的生成路径不能相同
2 mysql多实例搭建
一、mysqld_multi搭建
1、下载免编译二进制包
下载地址:http://mirrors.sohu.com/mysql/MySQL-5.7/
mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
2、解压和迁移
- cd /usr/local
#将安装包拖进local文件夹下并解压
- tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
- mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql
3、关闭iptables
#临时关闭
- service iptables stop
#永久关闭
- chkconfig iptables off
4、关闭selinux
- vi /etc/sysconfig/selinux
#将SELINUX修改为DISABLED,即SELINUX=DISABLED
![b8f26ecc15786890c4c8fcc4f4904ee0.png](https://i-blog.csdnimg.cn/blog_migrate/df2decf43cd39d43a19873c4d61d8cbc.jpeg)
5、创建mysql系统用户和组
- groupadd -g 27 mysql
- useradd -u 27 -g mysql mysql
- id mysql
![b0492aa9f7281971e0e7954ebdd99efc.png](https://i-blog.csdnimg.cn/blog_migrate/f1a7b62d44a9c001d905e09e2cb2f0fe.png)
6、创建mysql目录
- mkdir -p /data/mysql/mysql_3306/data
- mkdir -p /data/mysql/mysql_3306/log
- mkdir -p /data/mysql/mysql_3306/tmp
- mkdir -p /data/mysql/mysql_3307/data
- mkdir -p /data/mysql/mysql_3307/log
- mkdir -p /data/mysql/mysql_3307/tmp
- mkdir -p /data/mysql/mysql_3308/data
- mkdir -p /data/mysql/mysql_3308/log
- mkdir -p /data/mysql/mysql_3308/tmp
![281ad7d434b20ab7f3363a66d6111c23.png](https://i-blog.csdnimg.cn/blog_migrate/5e9498f1a4dd43905591f54198d78ddd.jpeg)
7、更改目录权限#任意目录下,输入
- chown -R mysql:mysql /data/mysql/
- chown -R mysql:mysql /usr/local/mysql/
8、添加环境变量
- echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
- source /etc/profile
![70ca5b275967c5323af0caf9caf8d23f.png](https://i-blog.csdnimg.cn/blog_migrate/cf6f6750170f1a1f23b1a81e41883b91.png)
9、复制my.cnf文件到etc目录
#将原来的my.cnf文件删除了
- cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
10、修改my.cnf(在一个文件中修改即可)
- vi /etc/my.cnf
- [client]
port=3306
socket=/tmp/mysql.sock
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
log = /data/mysql/mysqld_multi.log
[mysqld]
basedir = /usr/local/mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#3306数据库
[mysqld3306]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/data/mysql/mysql_3306/data
port=3306
server_id=3306
socket=/tmp/mysql_3306.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql_3306/log/slow.log
log-error = /data/mysql/mysql_3306/log/error.log
binlog_format = mixed
log-bin = /data/mysql/mysql_3306/log/mysql3306_bin
#3307数据库
[mysqld3307]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/data/mysql/mysql_3307/data
port=3307
server_id=3307
socket=/tmp/mysql_3307.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql_3307/log/slow.log
log-error = /data/mysql/mysql_3307/log/error.log
binlog_format = mixed
log-bin = /data/mysql/mysql_3307/log/mysql3307_bin
#3308数据库
[mysqld3308]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/data/mysql/mysql_3308/data
port=3308
server_id=3308
socket=/tmp/mysql_3308.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql_3308/log/slow.log
log-error = /data/mysql/mysql_3308/log/error.log
binlog_format = mixed
log-bin = /data/mysql/mysql_3308/log/mysql3308_bin
11、 初始化数据库 #初始化3306数据库
- /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3306/data --defaults-file=/etc/my.cnf
![57b1a145152a197d02f60bcdde79d4ca.png](https://i-blog.csdnimg.cn/blog_migrate/5bdbdd186101687f0f495dcb08235c85.jpeg)
![09b3cc163a10c4c8e04edcac8848a831.png](https://i-blog.csdnimg.cn/blog_migrate/1263245cefd3153cec042e80504ecb5c.png)
#初始化3307数据库
- /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3307/data --defaults-file=/etc/my.cnf
#初始化3308数据库
- /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3308/data --defaults-file=/etc/my.cnf
12、查看数据库是否初始化成功
查看3306、3307、3308数据库
- cd /data/mysql/mysql_3306/data/
- cd /data/mysql/mysql_3307/data/
- cd /data/mysql/mysql_3308/data/
![cde1362b4b8d145cbecc2ecb0c422279.png](https://i-blog.csdnimg.cn/blog_migrate/63df19d01df41ddaeb8ec9563ab9fb7c.jpeg)
13、设置启动文件
- cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
14、mysqld_multi进行多实例管理
启动全部实例:/usr/local/mysql/bin/mysqld_multi start
查看全部实例状态:/usr/local/mysql/bin/mysqld_multi report
启动单个实例:/usr/local/mysql/bin/mysqld_multi start 3306
停止单个实例:/usr/local/mysql/bin/mysqld_multi stop 3306
查看单个实例状态:/usr/local/mysql/bin/mysqld_multi report 3306
#启动全部实例
- /usr/local/mysql/bin/mysqld_multi start
- /usr/local/mysql/bin/mysqld_multi report
![e034b854fd8a5b9797c61c1a88788550.png](https://i-blog.csdnimg.cn/blog_migrate/99991ba514adb749548c316959dc6b3c.png)
# 查看启动进程
- ps -aux | grep mysql
![da3f95710d738160bd076f2aa78586d3.png](https://i-blog.csdnimg.cn/blog_migrate/9704dc5df1dfaf383a908aab2ba1e677.jpeg)
#进入tmp目录,查看sock文件
- cd /tmp
![81e59b896b954f00aacd2a6c34a0eb93.png](https://i-blog.csdnimg.cn/blog_migrate/2cd11837e8a52d570e6bf6fc0729f7f3.jpeg)
15、修改密码
mysql的root用户初始密码是空,所以需要登录mysql进行修改密码,下面以3306为例:
-
- mysql -S /tmp/mysql_3306.sock
- set password for root@'localhost'=password('xxxxxx');
- flush privileges;
![44a1676bd17c2c4a4d4ec69c6a50fed2.png](https://i-blog.csdnimg.cn/blog_migrate/aa0abc169fa2e33c9096f276f9604a43.jpeg)
#修改3307数据库密码
- mysql -S /tmp/mysql_3307.sock
- set password for root@'localhost'=password('xxxxxx');
- flush privileges;
#修改3308数据库密码
- mysql -S /tmp/mysql_3307.sock
- set password for root@'localhost'=password('xxxxxx');
- flush privileges;
16、新建用户及授权
一般新建数据库都需要新增一个用户,用于程序连接,这类用户只需要insert、update、delete、select权限。这里赋予所有权限,以3306为例,3307、3308相同。
#新增一个用户,并授权如下:
- grant ALL PRIVILEGES on *.* to admin@'%' identified by 'xxxxxx';
- flush privileges
![c366e64824dae7731d2549dfff197188.png](https://i-blog.csdnimg.cn/blog_migrate/f4f05144141f5e0a53b8f263532fb56c.png)
17、外部软件登录数据库
![4173547d75f482f64117157a3463f760.png](https://i-blog.csdnimg.cn/blog_migrate/a17645bde647962d3ba4e9686ba94fa9.jpeg)
图1
![66e2cfc01c33f04d6f7b15c195eb8a1a.png](https://i-blog.csdnimg.cn/blog_migrate/e20ef1955fa59ce58f6cdd9883d6f4c0.jpeg)
图2
二、多配置文件搭建
1、安装包分发
140搭建的有mysql数据库
#将数据库安装包分发到其他两台机器
- scp -r mysql/ root@192.168.3.141:/usr/local/
- scp -r mysql/ root@192.168.3.142:/usr/local/
2、卸载冗余数据库服务
#查找之前安装的数据库服务,若有,怎卸载数据库服务
- rpm -qa|grep -i mysql
- rpm -qa|grep -i MariaDB
- rpm -ev mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
![ca49acfa65f819af2f729066fd13b843.png](https://i-blog.csdnimg.cn/blog_migrate/80a1f9b5384688ae8d718dcde180c2be.png)
- rpm -ev mysql-community-test-5.7.19-1.el7.x86_64 mysql-community-devel-5.7.19-1.el7.x86_64 mysql-community-libs-5.7.19-1.el7.x86_64 mysql-community-embedded-compat-5.7.19-1.el7.x86_64 mysql-community-embedded-devel-5.7.19-1.el7.x86_64 mysql-community-server-5.7.19-1.el7.x86_64 mysql-community-minimal-debuginfo-5.7.19-1.el7.x86_64 mysql-community-common-5.7.19-1.el7.x86_64 mysql-community-libs-compat-5.7.19-1.el7.x86_64 mysql-community-embedded-5.7.19-1.el7.x86_64 mysql-community-client-5.7.19-1.el7.x86_64 mysql-community-server-minimal-5.7.19-1.el7.x86_64 --nodeps
3、安装数据库在141上安装数据库
#安装mysql的环境
- yum -y install gcc gcc-c++ gdb cmake ncurses-devel bison bison-devel
#解压mysql安装包
- tar -zxvf MySQL-5.7.19-1.el7.x86_64_64.rpm-bundle.tar
![0bdd79ec6858f5dcf032dfaad60d037a.png](https://i-blog.csdnimg.cn/blog_migrate/a4a67851b049a310559f930e6d640418.jpeg)
#安装mysql服务
- sudo rpm -ivh --force mysql-community-client-5.7.19-1.el7.x86_64.rpm mysql-community-common-5.7.19-1.el7.x86_64.rpm mysql-community-devel-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.19-1.el7.x86_64.rpm mysql-community-libs-5.7.19-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.19-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.19-1.el7.x86_64.rpm mysql-community-server-5.7.19-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.19-1.el7.x86_64.rpm mysql-community-test-5.7.19-1.el7.x86_64.rpm --nodeps
![f985ccc44feef11a29b17cee46d54266.png](https://i-blog.csdnimg.cn/blog_migrate/1261640d79e5e1725a4c6aea5f7f70f2.jpeg)
#查看安装的mysql服务
- rpm -qa|grep -i mysql
![1109fb877cb3b7ab841654ea47cab269.png](https://i-blog.csdnimg.cn/blog_migrate/a473d747259209e05fb01b05e4512591.jpeg)
在142上安装数据库:与上面同样的操作
4、启动mysql并查看状态
#启动
- service mysqld start
#查看数据库运行状态
- service mysqld status
![71343d4992fa13d835b7a0c5916bb201.png](https://i-blog.csdnimg.cn/blog_migrate/21929840920eeecc153e741cfb414cbe.jpeg)
#查看MySQL的进程
- ps -aux|grep mysql
![500a8d59bb8d09fc22e359844f226cdd.png](https://i-blog.csdnimg.cn/blog_migrate/1b053f8ca243a6571731639e2b8cc0c4.png)
5、设置开机自启
- systemctl enable mysqld.service
6、设置初始密码
#查看随机生成的mysql密码
- grep "password" /var/log/mysqld.log
![f9f4e40d617c1b52b21894dae3fc5da5.png](https://i-blog.csdnimg.cn/blog_migrate/8d8369e9bbc036697ecbb1ca7eda62e7.png)
#登陆数据库客户端
- mysql -u root -p
注意:用随机生成的密码
#设置新密码
- set password = password('xxxxxx');
7、新建用户和修改权限
#修改root用户的权限
- grant ALL PRIVILEGES on *.* to root@'%' identified by 'xxxxxx';
#创建amdin用户,并赋予限
- CREATE USER 'admin'@'%' IDENTIFIED BY 'xxxxxx';
- grant ALL PRIVILEGES on *.* to admin@'localhost' identified by 'xxxxxx';
- FLUSH PRIVILEGES;
#查看用户的权限
- select host,user from mysql.user;
![2a3bbe52b5bac1aa9fddf050114ee2a3.png](https://i-blog.csdnimg.cn/blog_migrate/7ee3bbb85e561803f9bd4ca4d40897d2.jpeg)
在142上设置数据库:与上面同样的操作
2 mysql集群搭建
一、mysql主从集群
1、建立siger用户并设置权限
登陆140的mysql数据库
- mysql -u root -p
- CREATE USER 'siger'@'%'IDENTIFIED BY 'xxxxxx';
- GRANT ALL PRIVILEGES ON *.* TO 'siger'@'%';
- grant ALL PRIVILEGES on *.* to siger@'localhost' identified by 'xxxxxx';
- FLUSH PRIVILEGES;
- select host,user from mysql.user;
![4e2f84c8d0a19a49faaf7ebe1db8a770.png](https://i-blog.csdnimg.cn/blog_migrate/e70625488160508ee91602193b2288d7.jpeg)
2、修改配置文件
修改三台数据库的配置文件
#140数据库的配置文件
- vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=140
![4a7291d193b217a9be4aab783bcf1276.png](https://i-blog.csdnimg.cn/blog_migrate/7968b4e46725f1ab6cbf528819c84ed8.jpeg)
#141数据库的配置文件
- vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=141
#142数据库的配置文件
- vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=142
3、查看master状态
- SHOW MASTER STATUS;
![8fb6c8583b395bb67dc51adf81bcaab8.png](https://i-blog.csdnimg.cn/blog_migrate/b0373552a3828882da95bdbae7c2aefe.png)
4、配置slave
#登陆在140,141据库,在slave上链接master
- change master to master_host='172.8.10.140',master_user='siger',master_password='xxxxxx',master_log_file='mysql-bin.000004',master_log_pos=77461339;
#参数配置
master_host:主节点mysql的IP地址
master_user:主节点mysql登陆用户的用户名
master_password:主节点mysql登陆用户的密码
master_log_file:主节点mysql的日志文件指定
master_log_pos:主节点mysql的Ppsition的ID
![4c0323af1d659ae347db59bcd79770a6.png](https://i-blog.csdnimg.cn/blog_migrate/b1f0a7167b62a597d8cfbc07d1f61fd2.png)
5、启动从服务
#在141数据库上
- start slave;
#在142数据库上
- start slave;
6、查看slave状态
#在3307数据库上
- show slave statusG
![36a52ab14cb1ed184963afb323755b9b.png](https://i-blog.csdnimg.cn/blog_migrate/d99cbe78b19953f0beb590d75cddbd90.jpeg)
#在3308数据库上
- show slave statusG
![e9742c0c01f0ee0d72072dec09864000.png](https://i-blog.csdnimg.cn/blog_migrate/e2402e514fa806726314f21049a98c29.jpeg)
7、主从测试
#在master建立数据库siger
- create database siger;
- use siger;
- create table slave_test(id int(6),name varchar(10))
- insert into slave_test values(000001,'weiyang');
- FLUSH PRIVILEGES;
- show tables;
![af376adef797a72ae90e88c2c9c30a67.png](https://i-blog.csdnimg.cn/blog_migrate/8ffdd2ec13d3c0a9fc2cbed4e0ebfccb.jpeg)
#在141、142从节点上查看
![13baa3197468ca249a371c1af2931c49.png](https://i-blog.csdnimg.cn/blog_migrate/43965eb7348e70988a4cb7cbd971c18d.jpeg)