北京SEO

Mysql 多实例启动配置详解

2019/10/10/17:35:36  阅读:1795  来源:谷歌SEO算法  标签: 1号店SEO

当开发与生产环境在同一台机器上,或需要在一台机器上部署多套测试环境时,往往需要同时起多个mysqld进程,最近帮测试搭环境的时候就碰到了这样的问题.

还是从安装mysql开始,下载tarball安装.

安装mysql,代码如下:

  1. groupaddmysql
  2. useradd-gmysqlmysql
  3. cmake.-DCMAKE_INSTALL_PREFIX=/usr/local/mysql5.5.27/-DMYSQL_DATADIR=/data/mysql-DWITH_INNOBASE_STORAGE_ENGINE=1-DMYSQL_TCP_PORT=3306-DMYSQL_UNIX_ADDR=/var/run/mysql/mysql.sock-DWITH_DEBUG=0
  4. make&&makeinstall

然后配置my.cnf,从support-files里面拷贝一个my-medium.cnf到/etc/my.cnf,里面mysqld配置段的内容基本是这个样子,my.cnf配置,代码如下:

  1. [mysqld]
  2. port=3306
  3. socket=/var/run/mysql/mysql.sock
  4. skip-external-locking
  5. key_buffer_size=16M
  6. max_allowed_packet=1M
  7. table_open_cache=64
  8. sort_buffer_size=512K
  9. net_buffer_length=8K
  10. read_buffer_size=256K
  11. read_rnd_buffer_size=512K
  12. myisam_sort_buffer_size=8M

默认mysqld只启动一个实例,既然我们的目的是启动多个mysqld实例,需要使用mysqld_multi,它是一个perl脚本,在使用之前,需要给my.cnf加一些料.

my.cnf配置[增加mysqld_mutli],代码如下:

  1. #mysqld_multi会读取这个配置短的内容
  2. [mysqld_multi]
  3. mysqld=/usr/local/mysql/bin/mysqld
  4. mysqladmin=/usr/local/mysql/bin/mysqladmin
  5. #第一个mysqld实例
  6. [mysqld1]
  7. port=3306
  8. socket=/var/run/mysql/mysql1.sock
  9. datadir=/data/mysql1
  10. general-log-file=/var/log/mysql/error.log
  11. skip-external-locking
  12. key_buffer_size=16M
  13. max_allowed_packet=1M
  14. table_open_cache=64
  15. sort_buffer_size=512K
  16. net_buffer_length=8K
  17. read_buffer_size=256K
  18. read_rnd_buffer_size=512K
  19. myisam_sort_buffer_size=8M
  20. log-bin=mysql-bin
  21. binlog_format=mixed
  22. server-id=1
  23. user=mysql
  24. #第二个mysqld实例
  25. [mysqld2]
  26. port=3307
  27. socket=/var/run/mysql/mysql2.sock
  28. datadir=/data/mysql2
  29. general-log-file=/var/log/mysql/error.log
  30. skip-external-locking--phpfensi.com
  31. key_buffer_size=16M
  32. max_allowed_packet=1M
  33. table_open_cache=64
  34. sort_buffer_size=512K
  35. net_buffer_length=8K
  36. read_buffer_size=256K
  37. read_rnd_buffer_size=512K
  38. myisam_sort_buffer_size=8M
  39. log-bin=mysql-bin
  40. binlog_format=mixed
  41. server-id=1
  42. user=mysql

然后依配置创建mysql运行时文件夹并用mysql_install_db脚本初始化系统库,代码如下:

  1. mkdir-p/data/mysql1/data/mysql2/var/log/mysql/var/run/mysql
  2. chgrpmysql/data/mysql*/var/log/mysql/var/run/mysql
  3. chownmysql/data/mysql*/var/log/mysql/var/run/mysql
  4. mysql_install_db--datadir=/data/mysql1--user=mysql
  5. mysql_install_db--datadir=/data/mysql2--user=mysql
  6. mysqld_multistart1-2

最后一条命令其实已经将我们配置好的mysqld1和mysqld2启动了,这时候在进程表中应该能看到两个mysqld进程,试着用-P参数指定端口能分别访问在/data/mysql1和/data/mysql2下面的两个库,两者互不影响,正好能满足测试的要求,当然需要配置更多的实例也是可以的额外收获.

这次配置过程中还遇到一些额外的问题,记下来备忘.

假如使用的是ubuntu(我目前的版本还是11.10),默认会安装apparmor,这个软件是一个诡异的存在,它就像一个暗恋者,一直默默限制软件的访问权限,然后又不被系统待见,以至于我根本不知道它的存在,其实它是一个白名单,在/etc/apparmor.d/中指定了/usr/sbin/mysqld对各文件的访问权限,当我想将mysql的数据文件夹迁移到别的位置时,一直报这个错误:

Can't create test file /data/mysql1/littleboy.lower-test

而令人费解的就是mysql对这些文件夹是有读写权限的,其实只需要编辑/etc/apparmor.d/usr.sbin.mysqld文件,依样画葫芦地为文件夹加上rw权限就可以了.

给mysql设置远程访问权限,只需要下面这条sql,代码如下:

INSERT mysql.user ( `Host`, `User`, `Password` ) VALUES ( '%', 'root', PASSWORD('123456') );

其中最关键的就是那个'%',表示通过任意host均可以访问到本机的mysql.

给mysql设置密码,代码如下:

mysqladmin -u root -h 127.0.0.1 password 123456

上面那种是在不登录mysql的情况下修改密码,还有两种可以通过改表的方式,见MySQL设置密码的三种方法.

修改过密码以后,mysqld_multi可能就不能通过默认配置来结束mysqld进程了,这时候需要在配置里加上用户名和密码,代码如下:

  1. [mysqld_multi]
  2. mysqld=/usr/local/mysql/bin/mysqld
  3. mysqladmin=/usr/local/mysql/bin/mysqladmin
  4. user=root
  5. password=123456

当然这样可能会有一些安全隐患,因为my.cnf是可见的,假如是多人使用,可以将password这行去掉,每次操作mysqld_multi的时候,在后面加上--password=123456参数就行了.

广告内容

Mysql 多实例启动配置详解 Mysql 多实例启动配置详解 Mysql 多实例启动配置详解

相关阅读

热门评论

木木老贼 木木老贼

互联网营销达人~

总篇数181

精选文章

RMAN中catalog和nocatalog区别介绍 小技巧:为Linux下的文件分配多个权限 zimbra8.5.1安装第三方签名ssl证书的步骤 解决mysql不能远程连接数据库方法 windows服务器mysql增量备份批处理数据库 mysql中slow query log慢日志查询分析 JavaScript跨域问题总结 Linux下负载均衡软件LVS配置(VS/DR)教程 mysql中权限参数说明 MYSQL(错误1053)无法正常启动

SEO最新算法