MySQL多实例

## 4.1 MySQL多实例 ### 4.1.1 什么是MySQL多实例 MySQL多实例4独特性: 1)独立进程 ``` [root@jkl1234 ~]# ps -ef|grep mysql root 1525 1 0 Jun05 ? 00:00:00 /bin/sh /www/server/mysql/bin/mysqld_safe --datadir=/www/server/data --pid-file=/www/server/data/jkl1234.pid mysql 2519 1525 0 Jun05 ? 00:11:26 /www/server/mysql/bin/mysqld --basedir=/www/server/mysql --datadir=/www/server/data --plugin-dir=/www/server/mysql/lib/plugin --user=mysql --log-error=jkl1234.err --open-files-limit=65535 --pid-file=/www/server/data/jkl1234.pid --socket=/tmp/mysql.sock --port=3306 root 13263 27434 0 16:59 pts/1 00:00:00 grep --color=auto mysql root 26764 15976 0 Jun11 pts/0 00:00:00 mysql -uroot -px xx ``` 2)独立端口 ``` [root@jkl1234 ~]# netstat -lntup|grep 3306 tcp6 0 0 :::3306 :::* LISTEN 2519/mysqld ``` 3)独立配置文件 ``` [root@jkl1234 ~]# ls /etc/my.cnf /etc/my.cnf ``` 4)独立数据文件 ``` ls `cat /etc/my.cnf|grep innodb_data_home_dir|awk -F= '{print $2}'` ``` ### 4.1.2 创建多实例 1.创建数据文件目录 ``` mkdir -p /data/{3307,3308}/data chown -R mysql.mysql /data ``` 2.创建多实例配置文件 通过cat命令命令快速添加配置文件内容,命令如下: ``` # 3307实例 cat >/data/3307/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/3307/data port=3307 socket= /data/3307/mysql.sock EOF # 3308实例 cat >/data/3308/my.cnf <<EOF [mysqld] user=mysql basedir=/usr/local/mysql datadir=/data/3308/data port=3308 socket=/data/3308/mysql.sock EOF ``` 3.配置MySQL多实例文件权限 通过下面的命令授权mysql用户和组管理整个多实例的根目录/data。 `chown -R mysql.mysql /data/{3307,3308}/data` 4.初始化多实例数据库文件 (1)初始化MySQL数据库,初始化命令为(相关参数在第三章安装已经详细解释): ``` /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data ``` ### 4.1.3 启动登录多实例 1.启动多实例 ``` 临时启动MySQL多实例的命令为: #<==3307实例启动命令。 /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf & #<==3308实例启动命令。 /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf & ``` ``` [root@db01 ~]# netstat -lntup|grep 330 tcp6 0 0 :::33060 :::* LISTEN 31565/mysqld tcp6 0 0 :::3306 :::* LISTEN 32022/mysqld tcp6 0 0 :::3307 :::* LISTEN 31562/mysqld tcp6 0 0 :::3308 :::* LISTEN 31565/mysqld ``` 2.登录不同多实例 ``` mysql -S /tmp/mysql.sock mysql -S /data/3307/mysql.sock mysql -S /data/3308/mysql.sock ``` ### 4.1.4 配置命令启动MySQL ``` /data/3307/mysql {start|stop|restart} /data/3308/mysql {start|stop|restart} [root@localhost 3307]# cat mysql #!/bin/bash case $1 in start) /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --user=mysql --port=3307 --socket=/data/3307/mysql.sock >/dev/null 2>&1 & ;; stop) kill `netstat -tunpl|grep 3307|awk '{print $7}'|awk -F/ '{print $1}'` ;; restart) /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --user=mysql --port=3307 --socket=/data/3307/mysql.sock >/dev/null 2>&1 & kill `netstat -tunpl|grep 3307|awk '{print $7}'|awk -F/ '{print $1}'` ;; *) echo "input (start|stop|restart|disable|enable)..." ;; esac cp /data/3307/mysql /etc/init.d/mysqld3307 cp /data/3308/mysql /etc/init.d/mysqld3308 chmod +x /etc/init.d/mysqld3307 chmod +x /etc/init.d/mysqld3308 service mysqld3307 start service mysqld3308 start /etc/init.d/mysqld3307 start /etc/init.d/mysqld3308 start [root@localhost ~]# service mysqld3307 start [root@localhost ~]# netstat -tunpl|grep 330 tcp6 0 0 :::3306 :::* LISTEN 14057/mysqld tcp6 0 0 :::3307 :::* LISTEN 18936/mysqld tcp6 0 0 :::3308 :::* LISTEN 18042/mysqld ``` ## 4.2 多实例应用场景 1.业务不是特别繁忙,且项目多,并且希望业务隔离开. 2.业务不是特别繁忙,想省钱 3.主从复制,读写分离集群环境,节省服务器数量... 4.大厂都会多实例,比如sina、百度、阿里。