mysql multi设置
http://naveensnayak.wordpress.com/2013/11/10/mysql-multiple-instances-on-ubuntu/MySQL multiple instances on Ubuntu
Assumptions
[*] OS: Ubuntu 12.04 LTS server edition – up to date
[*] Already has MySQL installed that comes default with 12.04 – you can easily install LAMP with the command tasksel
[*] MySQL Server version: 5.5.34-0ubuntu0.12.04.1 (Ubuntu)
[*] You have OS root privileges
[*] Default MySQL is running on port 3306
What will we do
[*] Set up 2 more MySQL instances on ports 3307 and 3308
[*] Each instance will have their own config files, data directories and log directories
Stopping default MySQL instance
Icon
sudo service mysql stop
sudo ps -A | grep mysql
Creating data directories
[*] MySQL cannot share data directories, so we need to set up new ones
[*] default basedir = /usr, this can be shared across instances
[*] default instance port = 3306 and data dir = /var/lib/mysql
[*] new instance port = 3307 and data dir = /var/lib/mysql3307
[*] new instance port = 3308 and data dir = /var/lib/mysql3308
[*] MySQL must own data dirs
[*] we need to set rules in apparmor to let MySQL access the new dirs
Icon
sudo mkdir /var/lib/mysql3307 sudo mkdir
/var/lib/mysql3308 sudo chown
-R mysql /var/lib/mysql3307 sudo chown
-R mysql /var/lib/mysql3308Creating data directories
[*] create separate log dirs for new MySQL instances
[*] default log dir = /var/log/mysql
[*] new log dir for 3307 = /var/log/mysql/mysql3307
[*] new log dir for 3308 = /var/log/mysql/mysql3308
[*] log dirs must be owned by MySQL
[*] note that /var/log/mysql already has apparmor permissions for MySQL, so any dir under it also has access
Icon
sudo mkdir /var/log/mysql/mysql3307sudo mkdir /var/log/mysql/mysql3308
sudo chown -R mysql /var/log/mysql/mysql3307
sudo chown -R mysql /var/log/mysql/mysql3308
Creating config files
[*] create the config files for new instances by copying default file
[*] default config file = /etc/mysql/my.cnf
[*] config file for 3307 = /etc/mysql/my3307.cnf
[*] config file for 3308 = /etc/mysql/my3308.cnf
[*] see config files on github
[*] /etc/mysql/my3307.cnf
[*] /etc/mysql/my3308.cnf
[*] special care has to be taken so that these values are different
[*] datadir
[*] server-id
[*] all port entries
[*] all socket entries
[*] all pid-file entries
[*] all log file entries, general, error, binary etc
Icon
sudo cp /etc/mysql/my.cnf /etc/mysql/my3307.cnfsudo cp /etc/mysql/my.cnf /etc/mysql/my3308.cnf Apparmor settings ( skip if you dont have this )
[*] apparmor is like an application firewall – comes installed default with Ubuntu server
[*] command aa-status will show you if it is loaded
[*] default apparmor profile for MySQL = /etc/apparmor.d/usr.sbin.mysqld
[*] put additional rules in /etc/apparmor.d/local/usr.sbin.mysqld
[*] specify the correct data dirs, pid and socket files for each instance - see file on github
[*] /etc/apparmor.d/local/usr.sbin.mysqld
[*] after modifying, restart apparmor
/etc/apparmor.d/usr.sbin.mysqld
Icon
# Site-specific additions and overrides for usr.sbin.mysqld.
# For more details, please see /etc/apparmor.d/local/README.
######### mysqld1 on port 3307 ###############
/var/lib/mysql3307/ r,
/var/lib/mysql3307/** rwk,
/var/run/mysqld/mysqld.pid3307 rw,
/var/run/mysqld/mysqld.sock3307 w,
/run/mysqld/mysqld.pid3307 rw,
/run/mysqld/mysqld.sock3307 w,
######### mysqld2 on port 3308 ###############
/var/lib/mysql3308/ r,
/var/lib/mysql3308/** rwk,
/var/run/mysqld/mysqld.pid3308 rw,
/var/run/mysqld/mysqld.sock3308 w,
/run/mysqld/mysqld.pid3308 rw,
/run/mysqld/mysqld.sock3308 w,
$sudo service apparmor reload
Installing new MySQL instances
[*] install MySQL files into the new data dirs for port 3307 and port 3308
[*] after this, under each new data dir, you will see the mysql, performance_schema and test dirs
[*] this will install MySQL with default settings,no root password
[*] in the below commands, you can use the - -verbose flag to see more details
Icon
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql3307 --defaults-file=/etc/mysql/my3307.cnf
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql3308 --defaults-file=/etc/mysql/my3308.cnf
Starting the mysql instances
[*] start the default instance on 3306
[*] start instances on 3307 and 3308 in the background
Icon
sudo service mysql start sudo -b mysqld_safe --defaults-file=/etc/mysql/my3307.cnf --user=mysql
sudo -b mysqld_safe --defaults-file=/etc/mysql/my3308.cnf --user=mysql
如果是centos系统,这样启动:/usr/bin/mysqld_safe --defaults-file= /etc/mysql/my3307.cnf --user=mysql &
Accessing the new instances
[*] Note that the new instances on 3307 and 3308 will not have a root password
[*] it is important to specify host and host=127.0.0.1
[*] if host is omitted, or localhost is given, then default instance is assumed ( on 3306 )
[*] remember to explicitly specify host and port for all commands
Icon
mysql -h 127.0.0.1 --port=3307 -u root
mysql -h 127.0.0.1 --port=3308 -u root
Shutting down the MySQL instances
[*] We will use mysqladmin to cleanly shutdown
[*] it is important to specify host and and port
[*] no password for now
Icon
mysqladmin -h 127.0.0.1 --port=3307 -u root shutdown
mysqladmin -h 127.0.0.1 --port=3308 -u root shutdown
Starting new instances on boot and reboot
[*] Put commands in the file /etc/rc.local to start new instances on boot
[*] the rc.local file will look like this
Icon
sudo -b mysqld_safe --defaults-file=/etc/mysql/my3307.cnf --user=mysql
sudo -b mysqld_safe --defaults-file=/etc/mysql/my3308.cnf --user=mysql
exit 0
补充:
[*] 防火墙添加3307端口,重启防火墙,
# vi /etc/sysconfig/iptables #编辑防火墙配置文件
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3307 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3308 -j ACCEPT
重启防火墙
# /etc/init.d/iptables restart #最后重启防火墙使配置生效
[*] 登录多实例的mysql要指定.sock文件
mysql -uroot -p -S /var/lib/mysql3307/mysql3307.sock
mysql -uroot -prx5dbt2c -S /var/lib/mysql3307/mysql3307.sock
[*] 创建密码:
mysqladmin -u root -S /var/lib/mysql3307/mysql3307.sock password 'rx5dbt2c'
[*] 授权远程登录
mysql>grant all privileges on *.* to 'root'@'%'> mysql> flush privileges;
页:
[1]