解决mysqld_multi 只能起来一个实例的问题
【问题1】我服务器主机上共有3个实例,当我mysqld_multi start启动的时候,只起来一个,查看mysqld_multi report 只有第一个实例是is running状态。查看配置文件中没有起来的实例的错误日志:
错误信息如下:
120305 21:24:22 mysqld_safe Starting mysqld daemon with databases from /home/data2
120305 21:24:22 [Note] Plugin 'FEDERATED' is disabled.
120305 21:24:22 InnoDB: The InnoDB memory heap is disabled
120305 21:24:22 InnoDB: Mutexes and rw_locks use InnoDB's own implementation
120305 21:24:22 InnoDB: Compressed tables use zlib 1.2.3
120305 21:24:22 InnoDB: Using Linux native AIO
120305 21:24:22 InnoDB: Initializing buffer pool, size = 128.0M
120305 21:24:23 InnoDB: Completed initialization of buffer pool
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
120305 21:24:23 InnoDB: Retrying to lock the first data file
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
InnoDB: using the same InnoDB data or log files.
根据错误提示
1、错误思考,可能是如下3个方面错误:
开始考虑的问题是资源抢占的问题,后来证实这个想法是正确的。
还有一种想法是进程抢占的问题,但是查看ps aux | grep mysql后发现端口并没有被占用。
上面写着
120305 21:24:22 InnoDB: The InnoDB memory heap is disabled ,会不会是内存不够用呢?但是这点没有写上error,所以这个问题并没有重点考虑。
2、仔细看配置文件中关于mysql_multi的配置,发现数据文件位置都在相同的目录下,也就是多个实例共用了一个ibdata文件,当然会只能起一个实例了。
【解决方法】
所以关闭所有库,修改mysql_multi各个实例,把他们的数据目录datadir放在不同的目录中。
重启库,又发现一个问题
――――――――――――――――――――――――――――――――――――
【问题2】
120307 21:05:46 InnoDB: Unable to open the first data file
InnoDB: Error in opening ./ibdata1
120307 21:05:46 InnoDB: Operating system error number 11 in a file op
eration.
InnoDB:
Error number 11 means 'Resource temporarily unavailable'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
120307 21:05:46 InnoDB: Could not open or create data files.
120307 21:05:46 InnoDB: If you tried to add new data files, and it failed here,
120307 21:05:46 InnoDB: you should now edit innodb_data_file_path in my.cnf back
120307 21:05:46 InnoDB: to what it was, and remove the new ibdata files InnoDB created
120307 21:05:46 InnoDB: in this failed attempt. InnoDB only wr
ote those files full of
120307 21:05:46 InnoDB: zeros, but did not yet use them in any way. But be careful: do not
120307 21:05:46 InnoDB: remove old data files which contain your precious data!
【错误原因】对datadir没有权限
【解决方法】分别初始化各个实例的授权表即可
mysql_install_db --datadir=/path/to/datadir
――――――――――――――――――――――――――――――――――――
重启后mysqld_multi start都启动了
此刻出现另一个问题
【问题3】关闭时,mysqld_multi stop 发现怎么也关闭不了3个实例,只能kill手动杀掉进程。
【错误原因】my.cnf中关于mysqld_multi中设置了user和password,但是并没有授权给这个user的shutdown权限
【解决方法】:授权给这个用户权限即可
或者在配置文件中把user和password删除掉即可
――――――――――――――――――――――――――――――――――――
至此,所有multi多实例启动问题均已解决!