一、mysql多实例原理
在一台服务器上,mysql服务开启多个不同的端口,运行多个服务进程。他们通过不同的 socket来监听不同的端口互不干扰地运行。
二、开发环境
ubuntu16.04.5LTS/i5/8G/500G/64位/mysql5.7.23/php7/apache2
三、配置步骤
1、创建
mysql实例数据存储目录
cd /var/lib/
mkdir 3308_mysql
chown -R mysql:mysql 3308_mysql //修改权限
2、创建配置文件
(我的环境中,mysql配置主要是/etc/mysql/my.cnf,其中又相应的加载conf.d和mysql.conf.d文件夹中的文件。我们直接copy,然后修改部分重要内容即可)
cd /etc/mysql/
cp -r conf.d conf3308.d
cp my.cnf my3308.cnf
cp -r mysql.conf.d mysql3308.conf.d
vi my3308.cnf
修改内容如下
!includedir /etc/mysql/conf3308.d/
!includedir /etc/mysql/mysql3308.conf.d/
cd mysql3308.conf.d
vi mysqld.cnf
修改内容如下:
[mysqld_safe]
socket = /var/lib/3308_mysql/mysqldsafe.sock
#nice = 0[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/lib/3308_mysql/mysqld.pid
socket = /var/lib/3308_mysql/mysqld.sock
port = 3308
basedir = /usr
datadir = /var/lib/3308_mysqllog_error = /var/lib/3308_mysql/error.log
3、添加读写权限apparmor
vi /etc/apparmor.d/usr.sbin.mysqld
在下面添加:
/var/lib/3308_mysql/ r,
/var/lib/3308_mysql/** rwk,
让apparmor重新加载配置文件
service apparmor reload
4、启动实例
这里得提醒大家的是,mysql_install_db初始化的方法已经不能在5.7版本使用了,亲测了N种方法都失败了,请使用以下命令。
mysqld --initialize-insecure --datadir=/var/lib/3308_mysql --user=mysql //初始化,其中--initialize-insecure 为创建时不带密码
mysqld_safe --defaults-file=/etc/mysql/my3308.cnf //启动
执行 ctrl + z //让实例后台运行
此时我们可以看数据库运行情况
netstat -anp | grep mysql
会看到
成功!监听3308端口
5、设置实例密码
mysql -uroot -p -S /var/lib/3308_mysql/mysqldsafe.sock -P 3308
Enter password: //直接enter,因为我们初始化时--initialize-insecure
mysql> use mysql
mysql> UPDATE user SET authentication_string= password ('123456') WHERE User='root';
mysql> exit
//重新启动
mysqladmin -uroot -S /var/lib/3308_mysql/mysqldsafe.sock shutdown
mysqld_safe --defaults-file=/etc/mysql/my3308.cnf
ctrl + z
mysql -uroot -p -S /var/lib/3308_mysql/mysqldsafe.sock -P 3308
Enter password: //此时需要输入刚才设置的密码
四、建库测试
我们在3308中创建了库db3308,我们去3306库中并没发现此库
反过来我们在3306的数据库操作对3308也没有影响。
我们发现,各个库独立运行,互不干扰。
五、开更多实例
重复配置步骤即可