1.mysql多实例
在一台机器上开启多个不同的mysql服务端口(3306,3307),运行多个mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。
多个实例共用一套mysql安装程序,配置文件可以用同一个(最好不同),启动程序可以用同一个(最好不同),数据文件是不同的。
服务器的硬件资源是公用的。
逻辑上多实例是各自独立的。
2.多实例的作用
有效利用服务器资源;(每台服务器的资源利用率要高)
节约服务器资源;
但是多实例会存在资源互相抢占问题,当某个服务实例并发很高或者有慢查询时,整个实例会消耗整个更多的内存、CPU等,导致其他实例运行也慢。
3.多实例的应用场景
资金比较紧张的公司;
并发访问不是特别大的业务;
门户网站一般会采取:目的是配硬件好的服务器,节省IDC机柜空间,让硬件资源不浪费。
4.mysql多实例常见配置方案
1)通过多个配置文件及多个启动程序来实现多实例
2)单一配置文件方案(一个配置文件里写多个实例的内容) mysqld_muti 此方法耦合性太高
5.建立多实例的条件
1)安装好mysql依赖的包
yum install ncurses-devel -y
yum install libaio-devel -y
2)在已经安装好的mysql环境中创建mysql多实例数据文件目录
采用/data目录作为mysql多实例总的数据文件根目录
pkill mysqld (创建前,需把创建好的单实例mysql杀掉)
rm -f /etc/init.d/mysqld (干掉单实例时的启动命令)
mkdir -p /data/{3306,3307}/data
tree /data
#生产硬件配置,32G MEM 8 CPU,硬盘6*600g SAS 15k,跑2-3个实例
分别在/data/3306和/data/3307下创建my.conf文件 不像单实例放在/etc/下
在每个下面也放各自的启动文件mysql
并授权data目录:chown -R mysql.mysql /data
find /data/ -type f -name "mysql" | xargs chmod +x (给启动文件授权执行权限)
find /data/ -type f -name "mysql" | xargs ls -l
环境变量设置单实例已设置
初始化命令同单实例,只是更改数据路径,如:在/application/mysql/scripts下执行./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql #初始化的目的就是为了生成存放文件的地方,结果就是在/data下生成了一些系统化的文件
多实例启动文件的启动mysql服务实质:
mysqld_safe --defaults-file=/data/3306/my.conf 2>&1 > /dev/null &
mysqld_safe --defaults-file=/data/3307/my.conf 2>&1 > /dev/null &
启动数据库:
scripts下/data/3306/mysql start
/data/3307/mysql start
netstat -lntup|grep 330[6-7]
多实例的登录一定要指定socket登录:
mysql -S /data/3306/mysql.sock
多实例为root增加密码:
mysqladmin -u root -S /data/3306/mysql.sock password 'oldboy123'
为了确保账户安全,因此要将启动脚本改权限,只有root可以更改密码:
find /data -type f -name "mysql" -exec chmod 700 {} \.
find /data -type f -name "mysql" -exec chown root.root {} \.
find /data -type f -name "mysql" -exec ls -l {} \.
多实例启动文件的停止mysql服务实质:
mysqladmin -u root -poldboy123 -S /data/3306/mysql.sock shutdown
mysqladmin -u root -poldboy123 -S /data/3307/mysql.sock shutdown
3)如果mysql服务没有起来,排查办法如下:
3.1)若发现没有mysql的端口,等几秒再看,可能是会比较慢
3.2)查看错误日志,该日志路径在my.cnf最下面可以看到
grep log-error my.cnf|tail -l
>>log-error=/data/3306/mysql_wk.err
3.3)前面每行命令执行的返回结果是否有错误
3.4)查看系统的/var/log/messages
4)增加mysql数据库第三个实例(3308)
mkdir -p /data/3308/data
cp /data/3306/my.cnf /data/3308/
cp /data/3306/mysql /data/3308/
chown -R mysql.mysql /data/3308/
cd /data/3308
调整一下my.cnf中的server-id不同于另两个实例的值 把所有的3306替换成3308
调整mysql中的3306替换成3308
cd /application/mysql/scripts初始化3308的数据库(要看到两个ok才算成功)
/data/3308/mysql start 或./mysql start
netstat -lntup|grep 3308
mysqladmin -u root -S /data/3308/mysql.sock password 'oldboy123'
mysql -uroot -poldboy123 -S /data/3308/mysql.sock
#Linux中可以用vimdiff file1 file2 来同时对比两个文件内容