MySQL多实例就是在一台机器上开启多个不一样的服务端口(如:3306,3307),运行多个MySQL服务进程,经过不一样的socket监听不一样的服务端口来提供各自的服务:;mysql
1:有效利用服务器资源,当单个服务器资源有剩余时,能够充分利用剩余的资源提供更多的服务。linux
2:节约服务器资源c++
3:资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,致使服务器上的其余实例提供服务的质量降低;web
第一种是使用多个配置文件启动不一样的进程来实现多实例,这种方式的优点逻辑简单,配置简单,缺点是管理起来不太方便;sql
第二种是经过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每一个实例的配置不太方面,优势是管理起来很方便,集中管理;shell
Red Hat Enterprise Linux Server release 6.4数据库
mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz服务器
tar -xvf mysql-5.6.21-linux-glibc2.5-x86_64.tar.gz并发
mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local/mysqlsocket
临时关闭:service iptables stop
永久关闭:chkconfig iptables off
vi /etc/sysconfig/selinux
将SELINUX修改成DISABLED,即SELINUX=DISABLED
groupadd -g 27 mysql
useradd -u 27 -g mysql mysql
id mysql
uid=501(mysql) gid=501(mysql) groups=501(mysql)
mkdir -p /data/mysql/ {mysql_3306,mysql_3307}
mkdir /data/mysql/mysql_3306/ {data,log,tmp}
mkdir /data/mysql/mysql_3307/ {data,log,tmp}
chown -R mysql:mysql /data/mysql/
chown -R mysql:mysql /usr/local/mysql/
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld_multi]
mysqld = /usr/local/mysql /bin/mysqld_safe
mysqladmin = /usr/local/mysql /bin/mysqladmin
log = /data/mysql/mysqld_multi.log
[mysqld]
user=mysql
basedir = /usr/local/mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld3306]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/data/mysql/mysql_3306/data
port=3306
server_id=3306
socket=/tmp/mysql_3306.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql_3306/log/slow.log
log-error = /data/mysql/mysql_3306/log/error.log
binlog_format = mixed
log-bin = /data/mysql/mysql_3306/log/mysql3306_bin
[mysqld3307]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/data/mysql/mysql_3307/data
port=3307
server_id=3307
socket=/tmp/mysql_3307.sock
log-output=file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/mysql/mysql_3307/log/slow.log
log-error = /data/mysql/mysql_3307/log/error.log
binlog_format = mixed
log-bin = /data/mysql/mysql_3307/log/mysql3307_bin
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3306/data --defaults-file=/etc/my.cnf
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3307/data --defaults-file=/etc/my.cnf
出现两个”OK”
查看3306数据库
[root@mysql ~]# cd /data/mysql/mysql_3306/data
[root@mysql data]# ls
auto.cnf ibdata1 ib_logfile0 ib_logfile1 mysql mysql.pid performance_schema test
查看3307数据库
[root@mysql ~]# cd /data/mysql/mysql_3307/data
[root@mysql data]# ls
auto.cnf ibdata1 ib_logfile0 ib_logfile1 mysql mysql.pid performance_schema test
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
启动所有实例:/usr/local/mysql/bin/mysqld_multi start
查看所有实例状态:/usr/local/mysql/bin/mysqld_multi report
启动单个实例:/usr/local/mysql/bin/mysqld_multi start 3306
中止单个实例:/usr/local/mysql/bin/mysqld_multi stop 3306
查看单个实例状态:/usr/local/mysql/bin/mysqld_multi report 3306
[root@mysql ~]# /usr/local/mysql/bin/mysqld_multi start
[root@mysql ~]# /usr/local/mysql/bin/mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running
mysql的root用户初始密码是空,因此须要登陆mysql进行修改密码,下面以3306为例:
mysql -S /tmp/mysql_3306.sock
set password for root@'localhost'=password('123456');
flush privileges;
下次登陆:
[root@mysql ~]# mysql -S /tmp/mysql_3306.sock -p
Enter password:
通常新建数据库都须要新增一个用户,用于程序链接,这类用户只须要insert、update、delete、select权限。
新增一个用户,并受权以下:
grant select,delete,update,insert on *.* to admin@'192.168.0.%' identified by '123456';
flush privileges
1:安装mysql报错
checking for tgetent in -lncurses... no
checking for tgetent in -lcurses... no
checking for tgetent in -ltermcap... no
checking for tgetent in -ltinfo... no
checking for termcap functions library... configure: error: No curses/termcap library found
缘由:
缺乏ncurses安装包
解决方法:
yum list|grep ncurses
yum -y install ncurses-devel
yum install ncurses-devel
2:.../depcomp: line 571: exec: g++: not found
make[1]: *** [my_new.o] 错误 127
make[1]: Leaving directory `/home/justme/software/mysql-5.1.30/mysys'
make: *** [all-recursive] 错误 1
解决方法:
yum install gcc-c++
3:.../include/my_global.h:909: error: redeclaration of C++ built-in type `bool'
make[2]: *** [my_new.o] Error 1
make[2]: Leaving directory `/home/tools/mysql-5.0.22/mysys'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/tools/mysql-5.0.22'
make: *** [all] Error 2
是由于gcc-c++是在configure以后安装的,此时只需从新configure后再编译make便可。
4:初始化数据库报错
报错现象:
root@mysql mysql-6.0.11-alpha]# scripts/mysql_install_db --basedir=/usr/local/mysql/ --user=mysql
Installing MySQL system tables...
ERROR: 1136 Column count doesn't match value count at row 1
150414 7:15:56 [ERROR] Aborting
150414 7:15:56 [Warning] Forcing shutdown of 1 plugins
150414 7:15:56 [Note] /usr/local/mysql//libexec/mysqld: Shutdown complete
Installation of system tables failed! Examine the logs in
/var/lib/mysql for more information.
You can try to start the mysqld daemon with:
shell> /usr/local/mysql//libexec/mysqld --skip-grant &
and use the command line tool /usr/local/mysql//bin/mysql
to connect to the mysql database and look at the grant tables:
shell> /usr/local/mysql//bin/mysql -u root mysql
mysql> show tables
Try 'mysqld --help' if you have problems with paths. Using --log
gives you a log in /var/lib/mysql that may be helpful.
The latest information about MySQL is available on the web at
http://www.mysql.com/. Please consult the MySQL manual section
'Problems running mysql_install_db', and the manual section that
describes problems on your OS. Another information source are the
MySQL email archives available at http://lists.mysql.com/.
Please check all of the above before mailing us! And remember, if
you do mail us, you MUST use the /usr/local/mysql//scripts/mysqlbug script!
缘由:
原有安装的mysql信息没有删除干净
解决方法:
删除/var/lib/mysql目录