mysql5.6多实例配置
多实例简述
在一台物理服务器上安装一套Mysql软件程序,创建多个Mysql实例,每个Mysql实例拥有各自独立的数据库、配置文件和启动脚本,多个Mysql实例共享服务器硬件资源(CPU,MEM,磁盘,网络)。可以将多实例形像的理解成一个房子里的多个房间,在房子里的浴室、厨房和客厅是公用资源。
多实例优劣
优点:
1、 充分利用服务器富余硬件资源,节约了硬件成本;
2、 在业务量并不太大,并发度也不高的场景是不错的选择;
缺点:
1、 共享硬件资源,容易造成资源争用;
2、 并不适用于大规模高并发的应用场景;
多实例配置思路
一、安装Mysql软件 (省略,假定软件的安装目录/usr/local/mysql)
二、创建库目录并授权
mkdir �Cp /data{3306,3307}/data (存放数据文件,二进制日志,sock和pid文件) mkdir �Cp /data/{3306,3307}/logs (存放错误日志和慢查询日志) chown �CR mysql.mysql /data
三、修改配置文件
1、修改3306的配置文件
vi /data/3306/my.cnf
[client] port = 3306 socket = /data/3306/data/mysql.sock [mysqld] port=3306 socket = /data/3306/data/mysql.sock pid-file = /data/3306/data/mysql.pid basedir = /usr/local/mysql datadir = /data/3306/data server-id=1 log-bin=mysql-bin log-bin-index= mysql-bin.index # LOGGING log_error=/data/3306/logs/mysql-error.log slow_query_log_file=/data/3306/logs/mysql-slow.log slow_query_log=1
2、修改3307的配置文件
vi /data/3307/my.cnf
[client] port = 3307 socket = /data/3307/data/mysql.sock [mysqld] port=3307 socket = /data/3307/data/mysql.sock pid-file = /data/3307/data/mysql.pid basedir = /usr/local/mysql datadir = /data/3307/data server-id=3 log-bin=mysql-bin log-bin-index= mysql-bin.index # LOGGING log_error=/data/3307/logs/mysql-error.log slow_query_log_file=/data/3307/logs/mysql-slow.log slow_query_log=1
其余配置文件参数可根据实际情况做修改
四、初始化数据库
cd /usr/local/mysql/scripts
1、3306数据库初始化
./mysql_install_db --defaults-file=/data/3306/my.cnf--user=mysql \ --basedir=/usr/local/mysql --datadir=/data/3306/data
2、3307数据库初始化
./mysql_install_db --defaults-file=/data/3307/my.cnf--user=mysql \ --basedir=/usr/local/mysql --datadir=/data/3307/data
五、修改启动脚本
可自行编写一个启动脚本,可参考/etc/init.d/portmap进行编写
脚本思想:
1、 启动mysql,使用mysqld_safe启动
mysqld_safe--defaults-file=/data3306/my.cnf --user=mysql \ --basedir=/usr/local/mysql--datadir=/data/3306/data &
2、 停止mysql,使用mysqladmin平滑停止
mysqladmin �Curoot �Cp123456 �CS/data/3306/data/mysql.sock shutdown
3、 重启mysql
先停止,后启动。
示例:
#!/bin/sh # This is an interactive program, we needthe current locale [ -f /etc/profile.d/lang.sh ] && ./etc/profile.d/lang.sh # We can't Japanese on normal console atboot time, so force. if [ "$LANG" = "ja" -o"$LANG" = "ja_JP.eucJP" ]; then if [ "$TERM" = "linux" ] ; then LANG=C fi fi # Source function library. . /etc/init.d/functions cmdPath="/usr/local/mysql/bin" myPath="/data/3307" softPath="/usr/local/mysql" socketfile="$myPath/data/mysql.sock" my_user="root" my_pass="123456" start(){ if [ ! -e "$socketfile" ];then printf "Mysqldstarting......\n" $cmdPath/mysqld_safe--defaults-file=$myPath/my.cnf --user=mysql \ --basedir=$softPath--datadir=$myPath/data &>/dev/null & sleep 2 else printf "Mysqld alreadyrunning\n" && exit 1 fi } stop(){ if [ -e "$socketfile" ];then printf "Mysqldstoping......\n" $cmdPath/mysqladmin-u"$my_user" -p"$my_pass" \ -S "$socketfile" shutdown &>/dev/null [ $? -ne 0 ] && echo"error username or password!!!" && exit 1 sleep 3 else printf "Mysqld alreadyclosed\n" && exit 1 fi } restart(){ stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status mysqld ;; *) echo "Usage: $0{start|stop|restart|status}" exit 1 esac
六、测试
1、 查看进程
ps �Cef|grep mysqld |grep �Cv grep
可以看到四个进程
2、 查看端口
netstat �Cnltup|grep 330
可以看到3306与3307两个监听端口
3、 测试mysql脚本
/data/3306/data/mysql start /data/3306/data/mysql stop /data/3306/data/mysql restart /data/3306/data/mysql xxxx
七、多实例本地及远程登陆
1、本地登陆,一定要添加sock区别不同实例
mysql �Curoot �Cp123456 �CS /data/3306/data/mysql.sock
2、远程登陆,与普通mysql连接一样,需要授权
mysql �Curoot �Cp123456 �Ch 192.168.31.200 �CP 3307
八、多实例修改口令
1、非交互式修改口令
mysqladmin �Curoot �Cp123456 password=’newpass’ �CS/data/3306/data/mysql.sock
2、root帐户连接到mysql,执行:
mysql>set passwordfor root@’192.168.31.%’=password(‘newpass’);
3、直接修改mysql.user表来实现:
mysql>update userset password=password('newpass') where host="192.168.31.%" and user="root"; mysql>flush privileges;