多实例就是在一台服务器上开启多个不同的mysql服务端口,运行多个mysql服务进程。这些进程通过不同的socket监听不同的服务端口,以此来提供不同的服务。
多个实例共用一套安装程序,但有各自的配置文件my.cnf,数据文件,进程以及日志文件等。
优点:有效的利用服务器资源
当单个服务器资源有剩余时,可以利用多实例来充分利用服务器的资源来提供更多的服务
缺点:会出现资源互相抢占的现象
当某个实例并发量很高,或者有慢查询时,会消耗服务器更多的cpu、内存、磁盘IO等资源,这时就会影响其他实例提供的服务,访问质量下降。
公司有不同业务数据库要各自独立的需求,同时访问量也不怎么大,服务器资源也有空余的,而且需要通过主从同步技术来提供备份或读写分离时,应该使用多实例。
1、通过相互隔离的配置文件来实现
2、使用官方自带的mysql_multi来实现(不方便,而且版本不兼容)
1、安装mariadb-server
官方下载二进制安装包
tar xzvf mariadb-10.2.20-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
mv mariadb-10.2.20-linux-x86_64 mysql
注意:安装完后不要启动mariadb,因为此时是单实例。
2、创建mysql用户
useradd -r mysql
3、创建各自的多实例的目录并修改权限
mkdir -p /mysql/{3306,3307,3308}/data
chowm -R mysql:mysql /mysql
4、创建各自的配置文件
cp support-files/my-huge.cnf /mysql/3306/my.cnf
vim /mysql/3306/my.cnf
[client]
port = 3306
socket = /mysql/3306/mysql.sock
[mysqld]
port = 3306
socket = /mysql/3306/mysql.sock
basedir=/usr/local/mysql
datadir=/mysql/3306/data
log-error=/mysql/3306/mysql.log
pid-file=/mysql/3306/mysql.pid
同样配置好3307和3308:
cp /mysql/3306/my.cnf /mysql/3307/my.cnf
cp /mysql/3306/my.cnf /mysql/3308/my.cnf
sed -i 's/3306/3307/g' /mysql/3307/my.cnf
sed -i 's/3306/3308/g' /mysql/3308/my.cnf
5、初始化多实例
cd /usr/local/mysql
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/3306/data
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/3307/data
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mysql/3308/data
查看
tree -L 3 /mysql/ #各自的data目录下是否生成了初始的数据库,-L 3表示只输出三层树结构。
6、修改数据库目录的权限
chown -R mysql:mysql /mysql/
7、启动多实例
/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/3306/my.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/3307/my.cnf &
/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/3308/my.cnf &
注意:起始单实例也是通过mysqld_safe来启动的,默认加载/etc/my.cnf文件
如果出现以下信息
警告:/mysql/3306/my.cnf全局可写,被忽略。是说这个文件每一个用户都可修改my.cnf文件,只需要修改一下权限即可。
chmod 770 -R /mysql #其他用户都没有权限
再次启动多实例即可。
查看实例是否启动成功
ss -anpl |grep mysqld
8、连接多实例
mysql -uroot -p -S /mysql/3306/mysql.sock
初始密码为空,直接回车即可。可以根据需要修改密码
至此,数据库多实例就部署完成了
如有错误,敬请指正~~