初始化多个mysql实例

时间:2022-07-22 05:23:29

之前我做了一个是在一台服务器上安装多套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 不同服务器不同的端口号