之前我做了一个是在一台服务器上安装多套mysql软件来构造多实例的。其实还有一种办法就是一套软件多个数据库。这就像在oracle里一套oracle软件,多个instance一样。也可以多套oracle软件,多个oracle_home,每套软件一个Instance。下面讲解one sw muti int.
在之前的源码路径下,有一个/mysql/scripts/mysql_install_db脚本,执行如下
/home/mysql/mysql/mysql/scripts/mysql_install_db --basedir=/app/slave
--datadir=/app/slave/data3 --defaults-file=/etc/my3309.cnf --user=mysql
其配置文件如下所示
[mysql@localhost:28.39 ~]$ cat /etc/my3309.cnf
[client]
socket = /app/slave/mysql3309.sock
port = 3309
[mysqld]
port = 3309
socket = /app/slave/mysql3309.sock
pid-file = /app/slave/data3/mysql3309.pid
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
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
[mysqld_multi]
mysqld = /app/slave/bin/mysqld_safe
mysqladmin = /app/slave/bin/mysqladmin
[mysqldump]
quick
max_allowed_packet = 16M
socket =/app/slave/mysql3309.sock
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
然后就可以启动这个实例了。命令如下
/app/slave/bin/mysqld_safe --defaults-file=/etc/my3309.cnf--datadir=/app/slave/data3 &
其中有几点需要注意:
1、 因为要给他制定新的配置文件。要用到参数-defaults-file,如果使用这个参数,则这个参数必须为首选项(就是为第一个参数。终于理解了)。
2、 还要制定—datadir。如果不制定,它就去找默认的datadir,即为/app/slave/data。我之前的错误一直是因为没指定—datadir参数,
3、 还有就是把—datadir参数写到—defaults-file参数前面去了,这样子—defaults-file会无效,这个实例又去找my.cnf默认配置文件去了。
现在用mysqld_multi的方法来启动实例。
1、 创建一个配置文件,可以从mysqld_multi–example来获得,最后如下
[mysqld_multi]
mysqld = /app/slave/bin/mysqld_safe
mysqladmin= /app/slave/bin/mysqladmin
#user = multi_admin
#password = my_password
[mysqld2]
socket = /app/slave/mysql3308.sock
port = 3308
pid-file = /app/slave/data2/mysql3308.pid
datadir = /app/slave/data2
#language = /app/slave/share/mysql/english
user = mysql
[mysqld3]
#mysqld =/path/to/mysqld_safe
#ledir = /path/to/mysqld-binary/
#mysqladmin = /path/to/mysqladmin
socket =/app/slave/mysql3309.sock
port = 3309
pid-file =/app/slave/data3/mysql3309.pid
datadir =/app/slave/data3
#language = /app/slave/share/mysql/swedish
user = mysql
现在就可以用mysqld_multi来管理这几个实例了。可以统一启动和关闭了。
如果各个实例的密码不一致,则不能一起关闭。最好把他们的密码设置为一致。
现在这样的配置可以满足一般的多实例,但是不能满足slave复制。因为slave复制所需的参数比这个多。最少要加上
relay_log =mysql-relay-bin
Server-id =2
Mysql客户端连接服务器的方法
1、 mysql -S/app/slave/mysql.sock –u root –p
2、 mysql --host=127.0.0.1 --port=3307/3308 –u root –p 不同服务器不同的端口号
3、 mysql --protocol=TCP -- port=3307/3308 –u root –p 不同服务器不同的端口号