暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL多实例创建

运维特工 2018-06-23
226

MySQL多实例创建

一、MySQL多实例介绍

1.MySQL多实例介绍

MySQL多实例:简单理解就是在一台服务器上,MySQL通过开启多个不同的端口(3306、3307、3308)来运行多个服务进程。这些MySQL服务进程通过不同的socket来监听不同的实例端口,进而实现互不干扰的提供各自的服务。

在同一台服务器上的MySQL多实例是共用一套MySQL应用程序,因此我们在部署MySQL的时候只需要部署一次MySQL程序即可,只是MySQL多实例之间会使用各自不同的my.cnf 配置文件、启动程序和数据文件。在提供服务方面,MySQL多实例在逻辑上看起来各自是独立的、互不干涉的,并且多个实例之间是根据配置文件的设定值来获取相关服务器的硬件资源。

当然像云数据库(RDS)都是每个实例单独部署一个MySQL程序,以便做的各种操作都不会互相影响;

2.MySQL多实例优缺点

  • 优点 (1)更充分利用服务器资源 当物理机配置比较高,单个实例无法充分使用服务器资源时,导致服务器资源过剩时,可以充分利用剩余的资源来提供更多的服务,或者是不同的业务错高峰运行; (2)节约服务器资源 当公司预算不足,但是我们又需要使用主从同步技术,这时多实例是最好的选择; (3)提高MySQL服务性能 MySQL数据库随着连接数的上升,性能会出现下降。所以我们可以使用MySQL多实例来分担MySQL数据库的连接数;

  • 缺点 (1)多实例资源互相抢占的问题 当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的硬件资源,例如内存、CPU和IO资源。这样必将导致服务器上的其他实例服务质量的下降,会对服务造成一定的影响。

3.MySQL多实例实现方式

mysql多实例一般来讲,有两种方案可以实现,两种方案各有利弊

(1) 基于多配置文件

可以通过使用过个配置文件来启动不同的MySQL进程,以此来实现多实例的创建;

  • 优点: 配置简单,逻辑也比较简单

  • 缺点: 如果实例太多,管理起来可能不是太方便

(2) 基于mysqld_multi

通过官方自带的mysqld_multi工具来创建多实例,使用单独配置文件来实现多实例的管理

  • 优点: 便于集中管理

  • 缺点: 不方便针对每个实例的配置进行定制

二、MySQL多实例的部署

1.环境介绍

portsocketconf
3307/tmp/mysql3307.sock/data/mysql/mysql3307/my3307.cnf
3308/tmp/mysql3308.sock/data/mysql/mysql3308/my3308.cnf

2.MySQL 3307实例部署

(1) 装相关依赖

  1. # yum install libaio -y

(2) 下载MySQL二进制安装包

国内源:

  1. # wget -P /opt/  http://mirrors.ustc.edu.cn/mysql-ftp/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

国外源:

  1. # wget -P /opt/  https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz

(3) 创建用户

  1. # useradd  -s /sbin/nologin  -M mysql

(4) 解压软连接MySQL二进制包

  1. # mkdir /opt/mysql/

  2. # tar zxf /opt/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /opt/mysql/

  3. # cd /usr/local/

  4. # ln -s /opt/mysql/mysql-5.7.18-linux-glibc2.5-x86_64 mysql

(5) 创建数据库相关目录

  1. # mkdir -pv /data/mysql/mysql3307/{data,logs,tmp}

(6) 修改相关目录权限

  1. # chown -R mysql.mysql /usr/local/mysql

  2. # chown -R mysql.mysql /data

(7) 创建配置文件

我们使用的配置文件为:/data/mysql/mysql3307/my3307.cnf

  1. # cat > /data/mysql/mysql3307/my3307.cnf << EOF

  2. ###### base ######

  3. #my.cnf

  4. [client]

  5. port = 3307

  6. socket = /tmp/mysql3307.sock


  7. [mysql]

  8. prompt="\u@\h:\p [\d]>"

  9. no-auto-rehash


  10. [mysqld]

  11. #misc

  12. user = mysql

  13. basedir = /usr/local/mysql

  14. datadir = /data/mysql/mysql3307/data

  15. tmpdir = /data/mysql/mysql3307/tmp

  16. port = 3307

  17. socket = /tmp/mysql3307.sock

  18. event_scheduler = 0


  19. #timeout

  20. interactive_timeout = 300

  21. wait_timeout = 300


  22. #character set

  23. character-set-server = utf8


  24. open_files_limit = 65535

  25. max_connections = 100

  26. max_connect_errors = 100000

  27. lower_case_table_names =1


  28. ###### GTID ######

  29. gtid-mode = on

  30. enforce-gtid-consistency=1


  31. ###### symi replication ######

  32. #rpl_semi_sync_master_enabled=1

  33. #rpl_semi_sync_master_timeout=1000 # 1 second

  34. #rpl_semi_sync_slave_enabled=1


  35. ####### slow log ######

  36. log-output=file

  37. slow_query_log = 1

  38. slow_query_log_file = slow.log

  39. log-error = error.log

  40. log_warnings = 2

  41. pid-file = mysql.pid

  42. long_query_time = 1

  43. #log-slow-admin-statements = 1

  44. #log-queries-not-using-indexes = 1

  45. log-slow-slave-statements = 1


  46. ####### binlog ######

  47. binlog_format = row

  48. server-id = 1003307

  49. log-bin = /data/mysql/mysql3307/logs/mysql-bin

  50. max_binlog_size = 256M

  51. sync_binlog = 0

  52. expire_logs_days = 10

  53. #procedure

  54. log_bin_trust_function_creators=1


  55. ####### relay log ######

  56. skip_slave_start = 1

  57. max_relay_log_size = 128M

  58. relay_log_purge = 1

  59. relay_log_recovery = 1

  60. relay-log=relay-bin

  61. relay-log-index = relay-bin.index

  62. log_slave_updates = ON

  63. #slave-skip-errors=1032,1053,1062

  64. #skip-grant-tables


  65. ####### buffers & cache ######

  66. table_open_cache = 2048

  67. table_definition_cache = 2048

  68. table_open_cache = 2048

  69. max_heap_table_size = 96M

  70. sort_buffer_size = 128K

  71. join_buffer_size = 128K

  72. thread_cache_size = 200

  73. query_cache_size = 0

  74. query_cache_type = 0

  75. query_cache_limit = 256K

  76. query_cache_min_res_unit = 512

  77. thread_stack = 192K

  78. tmp_table_size = 96M

  79. key_buffer_size = 8M

  80. read_buffer_size = 2M

  81. read_rnd_buffer_size = 16M

  82. bulk_insert_buffer_size = 32M


  83. #myisam

  84. myisam_sort_buffer_size = 128M

  85. myisam_max_sort_file_size = 10G

  86. myisam_repair_threads = 1


  87. #innodb

  88. innodb_buffer_pool_size = 100M

  89. innodb_buffer_pool_instances = 1

  90. innodb_data_file_path = ibdata1:100M:autoextend

  91. innodb_flush_log_at_trx_commit = 2

  92. innodb_log_buffer_size = 8M

  93. innodb_log_file_size = 100M

  94. innodb_log_files_in_group = 3

  95. innodb_max_dirty_pages_pct = 50

  96. innodb_file_per_table = 1

  97. innodb_rollback_on_timeout

  98. innodb_io_capacity = 2000

  99. transaction_isolation = READ-COMMITTED

  100. innodb_flush_method = O_DIRECT


  101. EOF

(8) 初始化3307实例数据库

  1. # cd /usr/local/mysql

  2. # ./bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf   --initialize

(9) 启动实例3307

  1. # /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3307/my3307.cnf &

(10) 登录3307实例

注意:第一次登录需要用初始密码登录;

  1. # mysql -uroot -p -S /tmp/mysql3307.sock

(11) 修改初始密码

查看初始密码:

  1. # grep "password" /data/mysql/mysql3307/data/error.log  

  2. 2018-01-09T07:51:15.311189Z 1 [Note] A temporary password is generated for root@localhost: /+dYyouJn2/g

初始密码为: /+dYyouJn2/g 每次初始化密码都不会相同; 登录数据库修改密码为:unixfbi.com

  1. # # mysql -uroot -p初始密码 -S /tmp/mysql3307.sock

  2. mysql> alter user user() identified by 'unixfbi.com';

  3. 或者:

  4. mysql> SET PASSWORD=PASSWORD('unixfbi.com');

  5. mysql> flush privileges;

3.MySQL 3308实例部署

(1) 创建数据库相关目录

  1. # mkdir -pv /data/mysql/mysql3308/{data,logs,tmp}

(2) 创建配置文件

我们使用的配置文件为:/data/mysql/mysql3308/my3308.cnf

  1. cp /data/mysql/mysql3307/my3307.cnf    /data/mysql/mysql3308/my3308.cnf

  2. sed -i  's/3307/3308/g'   /data/mysql/mysql3308/my3308.cnf

我们这里复制一下3307实例的配置文件,然后修改一下。其实需要修改的内容为:

  1. # grep "3307" /data/mysql/mysql3308/my3308.cnf  

  2. port = 3307

  3. socket = /tmp/mysql3307.sock

  4. datadir = /data/mysql/mysql3307/data

  5. tmpdir = /data/mysql/mysql3307/tmp

  6. port = 3307

  7. socket = /tmp/mysql3307.sock

  8. server-id = 1003307

  9. log-bin = /data/mysql/mysql3307/logs/mysql-bin

(3) 修改相关目录限

  1. # chown -R mysql.mysql /data/mysql/mysql3308/

(4) 初始化3308实例数据库

  1. # ./bin/mysqld --defaults-file=/data/mysql/mysql3308/my3308.cnf   --initialize  

(5) 启动实例3308

  1. # /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3308/my3308.cnf &

(6) 登录3308实例

注意:第一次登录需要用初始密码登录;

  1. # mysql -uroot -p -S /tmp/mysql3308.sock

(7) 修改初始密码

查看初始密码:

  1. # grep "password" /data/mysql/mysql3308/data/error.log

  2. 2018-01-09T09:00:33.711566Z 1 [Note] A temporary password is generated for root@localhost: 0L8fUEe,j,;w

初始密码为: 0L8fUEe,j,;w 每次初始化密码都不会相同; 登录数据库修改密码为:unixfbi.com

  1. # # mysql -uroot -p初始密码 -S /tmp/mysql3308.sock

  2. mysql> alter user user() identified by 'unixfbi.com';

  3. 或者:

  4. mysql> SET PASSWORD=PASSWORD('unixfbi.com');

  5. mysql> flush privileges;

(8) 设置登录后标识

  1. # cat > /etc/my.cnf << EOF

  2. [mysql]

  3. prompt="\u@\h:\p [\d]> "


  4. EOF

登录后的效果:

  1. root@localhost:mysql3308.sock [(none)]>

三、MySQL多实例常用操作

1.MySQL多实例常用命令

  • 启动

  1. /usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql3308/my3308.cnf &

  • 停止

  1. # mysqladmin -S /tmp/mysql3308.sock  -p shutdown

  • 登录

  1. mysql -S /tmp/mysql3308.sock -uroot -p

2.MySQL常用命令介绍

方式一:

  1. # /usr/local/mysql/bin/mysqld_safe --defaults-file=/path/my.cnf &

这种方式还需要修改mysqld_safe脚本 方式二:

  1. /usr/local/mysql/bin/mysqld --defaults-file=/path/my.cnf &

这是最省事的一种启动方式 方式三:

  1. # /usr/local/mysql/bin/mysqld_multi start 3307

这种方式必须是以mysqld_multi方式创建的多实例才可以使用该方式启动或者停止;

参考文档

https://www.cnblogs.com/ZhangRuoXu/p/6706427.html

本文出自 “运维特工” 博客,转载请务必保留原文链接 和 http://www.unixfbi.com


文章转载自运维特工,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论