一、什么是MySQL的多实例
mysql多实例就是在一台机器上开启多个不同的服务端口,运行多个mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。这些MySQL多实例公用一套MySQL安装程序,使用不同的(也可以相同)my.cnf配置文件,启动程序,数据文件。在提供服务时多实例MySQL在逻辑生看来是各自独立的,多实例的自身是根据配置文件对应的设定值,来取得服务器相关硬件资源。
MySQL多实例可以有效利用服务器资源但是会消耗更多内存、cpu、磁盘和io资源。
一般用在访问不是特别大的业务上。
二、配置MySQL多实例方法
通过配置多个配置文件以及多个启动程序来实现多实例。这里采用/data目录作为mysql多实例总的根目录。然后规划不同的mysql实例端口号来作为/data下面的二级目录,不同端口号就是不同实例目录。二级目录包含mysql数据文件,配置文件以及启动文件的目录。
-
创建相关mysql多实例目录
mkdir -p /data/{3306,3307}/data pkill mysql #结束单实例mysql rm -rf /etc/init.d/mysqld #删除单实例开机启动脚本,以免冲突
-
3306配置文件
[client] #客户端 port = 3306 socket = /data/3306/mysql.sock [mysqld] #服务端 port = 3306 socket = /data/3306/mysql.sock basedir = /home/application/mysql #安装位置,也就是初始化软件install—db位置 datadir = /data/3306/data #mysql数据文件位置 skip-external-locking key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M skip-name-resolve log-bin=/data/3306/mysql-bin binlog_format=mixed max_binlog_size = 500M server-id = 1 [mysqld_safe] log-error=/data/3306/mysql_3306.err pid-file=/data/3306/mysql.pid [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
以上是实例3306的my.cnf配置文件,现在我们来配置实例3307的my.cnf。实例3307的配置文件my.cnf我们直接复制实例3306的my.cnf文件,然后通过sed命令把该文件中的3306修改为3307即可。如下:
cp /data/3306/my.cnf /data/3307/my.cnf
sed -i 's/3306/3307/g' /data/3307/my.cnf
配置完成后/data目录结构
tree /data/
/data/
├── 3306
│ ├── data
│ └── my.cnf
└── 3307
├── data
└── my.cnf
-
修改mysql实例的数据库目录权限
chown -R mysql.mysql /data touch //data/3306/mysql_3306.err #创建错误日志目录 touch //data/3307/mysql_3307.err #创建错误日志目录
-
初始化数据库
初始化是为了创建基础数据库文件
mysql-5.1XX初始化路径在/mysql/bin/*目录下
mysql5.5在/mysql/scripts/*目录下/home/application/mysql/scripts/mysql_install_db --basedir=/home/application/mysql --datadir=/data/3306/data --user=mysql #初始化3306 /home/application/mysql/scripts/mysql_install_db --basedir=/home/application/mysql --datadir=/data/3307/data --user=mysql #初始化3307
-
启动mysql5.5多实例
这里要指定不同配置文件的位置/home/application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf & /home/application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &
-
查看启动状态
netstat -lnutp |grep 330[6-7] tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 4111/mysqld tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 4442/mysqld
-
登录mysql
登录多实例数据库时,我们需要加入该实例的socket文件,才能正常登录。mysql -S /data/3306/mysql.sock #这里要指定socket mysql -S /data/3307/mysql.sock mysql -u root -p -S /data/3307/mysql.sock mysql -u root -p -h 127.0.0.1 -p3307 # 远程登录方法,不需要指定socket
-
设置登录密码
mysqladmin -uroot password "123456" -S /data/3306/mysql.sock mysqladmin -uroot password "123456" -S /data/3307/mysql.sock
-
用密码登录
mysql -uroot -S /data/3306/mysql.sock -p123456 mysql -S /data/3307/mysql.sock -p123456 #指定socket
-
停止多实例
mysqladmin -uroot -p123456 -S /data/3306/mysql.sock shutdown mysqladmin -uroot -p123456 -S /data/3307/mysql.sock shutdown killall mysqld