本文共 6887 字,大约阅读时间需要 22 分钟。
一,Mysql 多实例的作用的问题
1,有效利用服务器的资源
当单个服务器资源有剩余的时候,可以充分利用剩余的资源以提供更多的服务
2,节约服务器的资源
当公司资源紧张,但是数据库各自需要独立提供服务,而且需要主从同步等技术时候,此时使用多实例是最好的。
3,资源互相抢占的问题
当某个服务实例并发很高或者有慢查询的时候,整个实例会消耗更多的CPU,内存,磁盘IO资源,导致服务器上其他的实例提供的服务质量大大下降,相当于一个大房子,多个卧室,大家共用一个卫生间,早餐起床,一个人上厕所,长期占用,其他人要等待一样的道理。
二、Mysql 多实例的应用场景
1,资源紧张型的公司
业务量不大,不想花钱,又有多需求,所以特别适合多实例
2,并发访问不是特别大的网站
当公司业务量不大的适合,服务器资源没有充分利用,有浪费的时候,就可以使用多实例
3,百度搜索引擎就使用了多实例 ,sina 网也使用了多实例
目的,节约IDC空间,资源充分利用
sina的配置 SATA 15000转 4块做raid5 48G内存
三、MySQL多实例的配置方案
方案一:如下图 推荐使用此
这种方式的优势逻辑简单,配置简单,耦合度低
缺点是管理起来不太方便。
方案二:单一的部署方案 不推荐,耦合性太高
[mysqld_muti]
即一个配置文件 启动多个实例
四、开始配置MySQL多实例
环境介绍:
mysql 版本:5.6.27
操作系统:Centos 6.5
mysql实例数:2个
实例占用端口分别为:3306、3307
先配置方案一:
1.下载:在http://dev.mysql.com/downloads/mysql/官网上下载
2.解压
1 | tar xvf mysql-5.6.27-linux-glibc2.5-x86_64. tar .gz |
3.移动到/usr/local/mysql
1 | mv mysql-5.6.27-linux-glibc2.5-x86_64 mysql |
4.安装依赖的lib包:
1 | centos:yum install libaio -y |
5、配置用户,目录
1 2 3 4 5 | shell> groupadd mysql shell> useradd -r -g mysql mysql shell> cd /usr/ local /mysql shell> chown -R mysql . shell> chgrp -R mysql . |
6、使用/data/目录作为MySQL多实例的总目录
1 | mkdir -p /data/ {3306,3307} /data |
7、开始配置多实例的配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | vim /data/3306/my.cnf [mysqld] #general basedir = /usr/ local /mysql datadir = /data/3306/data socket = /data/3306/mysql.sock user = mysql port = 3306 server_id = 1 log-error = /data/3306/err.log pid = /data/3306/mysql.pid #binlog log-bin = /data/3306/mysql-bin sync-binlog = 1 #InnoDB innodb_flush_log_at_trx_commit innodb_support_xa = 1 #other character_set_server = utf8 default_storage_engine =InnoDB ft_min_word_len = 1 open_files_limit = 65535 auto-increment-increment = 10 auto-increment-offset = 1 log_slave_updates=1 允许备库将其重放的事件也记录到自身的二进制日志中 read_only=0 阻止任何没有特权权限的线程修改数据 skip_slave_start [client] socket = /data/3306/mysql.sock port = 3306 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | vim /data/3307/my.cnf [mysqld] #general basedir = /usr/ local /mysql datadir = /data/3307/data socket = /data/3307/mysql.sock user = mysql port = 3307 server_id = 1 log-error = /data/3307/err.log pid = /data/3307/mysql.pid #binlog log-bin = /data/3307/mysql-bin sync-binlog = 1 #InnoDB innodb_flush_log_at_trx_commit innodb_support_xa = 1 #other character_set_server = utf8 default_storage_engine =InnoDB ft_min_word_len = 1 open_files_limit = 65535 auto-increment-increment = 10 auto-increment-offset = 1 log_slave_updates=1 允许备库将其重放的事件也记录到自身的二进制日志中 read_only=0 阻止任何没有特权权限的线程修改数据 skip_slave_start [client] socket = /data/3307/mysql.sock port = 3307 |
8、创建多实例的启动文件 。
放到/data/3306 | /data/3307 下
脚本省略(mysqld)
多实例启动文件的启动MySQL服务实质:
1 2 | mysqld_safe --defaults- file = /data/3306/my .cnf 2>&1 > /dev/null & mysqld_safe --defaults- file = /data/3307/my .cnf 2>&1 > /dev/null & |
多实例启动文件的停止MySQL服务实质:
1 2 | mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown 平滑停止 |
9,授权MySQL用户,和组管理整个多实例目录
1 | chown -R mysql.mysql /data |
10,配置MySQL全局环境变量
1 2 | echo "export PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile source /etc/profile |
11,开始初始化数据库
1 2 3 | cd/usr/ local /mysql/scripts/ ./mysql_install_db --user=mysql --datadir=/data/3306/data/ --basedir=/usr/local/mysql/ ./mysql_install_db --user=mysql --datadir=/data/3307/data/ --basedir=/usr/local/mysql/ |
什么初始化数据库?
a,初始化的主要目的就是创建基础的数据库文件,例如生成MySQL的库表
b,初始化后,产看目录,可以看到一些表文件
12,启动| 停止 MySQL服务
如果有脚本,则使用脚本启动
1 2 | /data/3306/mysql start /data/3307/mysql start |
如果没有脚本,则使用以下启动
1 | mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null & |
1 2 3 4 5 6 7 | mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null & 如果没有脚本,则使用一下启动停止 mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown 平滑停止| |
13,检查
登陆:
mysql -S /data/3306/mysql.sock
管理的话,在本地都是采用 -S /data/3306/mysql.sock,如果在远程可以通过不同的端口连接上去坐管理操作。其他的和单实例的管理没什么区别!
#######################################################################################
再来看第二种通过官方自带的mysqld_multi来实现多实例实战:
这里的mysql安装以及数据库的初始化和前面的步骤一样,就不再赘述。
mysqld_multi的配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | vim /etc/my.cnf [mysqld_multi] mysqld = /usr/ local /mysql/bin/mysqld_safe mysqladmin = /usr/ local /mysql/bin/mysqladmin user = admin password = password [mysqld1] #general basedir = /usr/ local /mysql/ datadir = /data/3306/data/ socket = /data/3306/mysql.sock user = mysql port = 3306 server_id = 1 log-error = /data/3306/ pid = /data/3306/ #binlog log-bin = /data/3306/mysql-bin sync-binlog = 1 #InnoDB innodb_flush_log_at_trx_commit innodb_support_xa = 1 #other character_set_server = utf8 default_storage_engine =InnoDB ft_min_word_len = 1 open_files_limit = 65535 auto-increment-increment = 10 auto-increment-offset = 1 log_slave_updates=1 允许备库将其重放的事件也记录到自身的二进制日志中 read_only=0 阻止任何没有特权权限的线程修改数据 skip_slave_start [client] socket = /data/3306/mysql.sock port = 3306 [mysqld2] #general basedir = /usr/ local /mysql/ datadir = /data/3307/data/ socket = /data/3307/mysql.sock user = mysql port = 3307 server_id = 2 log-error = /data/3307/ pid = /data/3307/ #binlog log-bin = /data/3307/mysql-bin sync-binlog = 1 #InnoDB innodb_flush_log_at_trx_commit innodb_support_xa = 1 #other character_set_server = utf8 default_storage_engine =InnoDB ft_min_word_len = 1 open_files_limit = 65535 auto-increment-increment = 10 auto-increment-offset = 1 log_slave_updates=1 允许备库将其重放的事件也记录到自身的二进制日志中 read_only=0 阻止任何没有特权权限的线程修改数据 skip_slave_start [client] socket = /data/3307/mysql.sock port = 3307 [mysql] no -auto-rehash prompt=\\u@\\d \\R:\\m> [mysqld_safe] open -files-limit = 8192 |
mysqld_multi启动
1 2 3 4 5 6 7 8 9 10 11 | /usr/ local /mysql/bin/mysqld_multi start 1 /usr/ local /mysql/bin/mysqld_multi start 2 停止MySQL实例 mysqladmin -uroot -p -S /data/3306/mysql.sock shutdown mysqladmin -uroot -p -S /data/3307/mysql.sock shutdown 更改原来密码 mysqladmin -uroot password '123456' -S /data/3306/mysql.sock mysqladmin -uroot password '123456' -S /data/3307/mysql.sock |
测试登陆
1 2 | mysql -uroot -p -S /data/3306/mysql.sock mysql -uroot -p -S /data/3307/mysql.sock |
#########################################################################################
多实例MySQL忘记密码,修改密码的方法:
1,停掉原有实例进程
1 | mysqladmin -uroot -p -S /data/3306/mysql.sock shutdown |
2,加参数登录MySQL,此时跳过密码验证
1 | mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables & |
3,登录,并修改密码
1 | mysql -uroot -p -S /data/3306/mysql.sock 登录时空密码 |
修改密码:
1 2 | update mysql. user set passowrd= password ( "123456" ) where user = 'root' ; flush privileges ; |
4,重启MySQL,使用新密码登录
1 2 | mysqladmin -uroot -p -S /data/330/mysql.sock shutdown mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null & |