一、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_mysql

log_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也没有影响。

我们发现,各个库独立运行,互不干扰。

五、开更多实例

重复配置步骤即可

最新文章

  1. vue.js初探
  2. Office 365常见问题解答(第一期)
  3. The property on could not be set to a 'Int16' value.You must set this property to a non-null value of type ‘Int32’.”
  4. HDU 5833 Zhu and 772002 (数论+高斯消元)
  5. SQL SERVER 强制排序规则查询
  6. POJ 3440 Coin Toss(求概率)
  7. 【转】PL/SQL编辑数据"这些查询结果不可更新,请包括ROWID或使用SELECT...FOR UPDATE获得可更新结果"处理
  8. web服务交互中HTTP数据内容GZIP,ZLIB格式压缩与解压缩封装(共享)
  9. Android的深度定制版阿里云os(Android的山寨)
  10. JS中setTimeout()的使用方法具体解释
  11. mysql的 charset、collation、prefix了解
  12. Xcode7中 添加 .dylib
  13. windows c++程序移植到linux的要点
  14. C++ 类模板与模板类详解
  15. ubuntu挂载的NTFS文件编译失败问题
  16. MyBatis DTD文件下载地址
  17. iPhone屏蔽IOS更新、iPhone系统更新的提示(免越狱,有效期更新至2021年)
  18. 0_Simple__simpleVoteIntrinsics + 0_Simple__simpleVoteIntrinsics_nvrtc
  19. #leetcode刷题之路43-字符串相乘
  20. 利用oneproxy实现mysql读写分离搭建笔记

热门文章

  1. threejs立方体贴图产生边缘锯齿问题
  2. css常用命名
  3. [编译] 6、开源两个简单且有用的安卓APP命令行开发工具和nRF51822命令行开发工具
  4. webpack 解决 semantic ui 中 google fonts 引用的问题
  5. 安卓开发笔记(十六):'Request(okhttp3.Request.Builder)' has private access in 'okhttp3.Request
  6. [Swift]LeetCode38. 报数 | Count and Say
  7. [Swift]LeetCode869. 重新排序得到 2 的幂 | Reordered Power of 2
  8. vue总结
  9. Android studio使用过程中错误的解决方法
  10. Vue中实现一个无限加载列表