博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL多实例介绍与创建
阅读量:6869 次
发布时间:2019-06-26

本文共 6891 字,大约阅读时间需要 22 分钟。

一、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.环境介绍

port socket conf
3307 /tmp/mysql3307.sock /data/mysql/mysql3307/my3307.cnf
3308 /tmp/mysql3308.sock /data/mysql/mysql3307/my3308.cnf

2.MySQL 3307 实例部署

(1) 装相关依赖

# yum install libaio -y

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

国内源:

# 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

国外源:

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

(3) 创建用户

# useradd  -s /sbin/nologin  -M mysql

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

# mkdir /opt/mysql/# tar zxf /opt/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /opt/mysql/# cd /usr/local/# ln -s /opt/mysql/mysql-5.7.18-linux-glibc2.5-x86_64 mysql

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

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

(6) 修改相关目录权限

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

(7) 创建配置文件

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

# cat > /data/mysql/mysql3307/my3307.cnf << EOF###### base #######my.cnf[client]port = 3307socket = /tmp/mysql3307.sock[mysql]prompt="\u@\h:\p [\d]> " no-auto-rehash[mysqld]#miscuser = mysqlbasedir = /usr/local/mysqldatadir = /data/mysql/mysql3307/datatmpdir = /data/mysql/mysql3307/tmpport = 3307socket = /tmp/mysql3307.sockevent_scheduler = 0#timeoutinteractive_timeout = 300wait_timeout = 300#character setcharacter-set-server = utf8open_files_limit = 65535max_connections = 100max_connect_errors = 100000lower_case_table_names =1###### GTID ######gtid-mode = onenforce-gtid-consistency=1###### symi replication #######rpl_semi_sync_master_enabled=1#rpl_semi_sync_master_timeout=1000 # 1 second#rpl_semi_sync_slave_enabled=1####### slow log ######log-output=fileslow_query_log = 1slow_query_log_file = slow.loglog-error = error.loglog_warnings = 2pid-file = mysql.pidlong_query_time = 1#log-slow-admin-statements = 1#log-queries-not-using-indexes = 1log-slow-slave-statements = 1####### binlog ######binlog_format = rowserver-id = 1003307log-bin = /data/mysql/mysql3307/logs/mysql-binmax_binlog_size = 256Msync_binlog = 0expire_logs_days = 10#procedure log_bin_trust_function_creators=1####### relay log ######skip_slave_start = 1max_relay_log_size = 128Mrelay_log_purge = 1relay_log_recovery = 1relay-log=relay-binrelay-log-index = relay-bin.indexlog_slave_updates = ON#slave-skip-errors=1032,1053,1062#skip-grant-tables####### buffers & cache ######table_open_cache = 2048table_definition_cache = 2048table_open_cache = 2048max_heap_table_size = 96Msort_buffer_size = 128Kjoin_buffer_size = 128Kthread_cache_size = 200query_cache_size = 0query_cache_type = 0query_cache_limit = 256Kquery_cache_min_res_unit = 512thread_stack = 192Ktmp_table_size = 96Mkey_buffer_size = 8Mread_buffer_size = 2Mread_rnd_buffer_size = 16Mbulk_insert_buffer_size = 32M#myisammyisam_sort_buffer_size = 128Mmyisam_max_sort_file_size = 10Gmyisam_repair_threads = 1#innodbinnodb_buffer_pool_size = 100Minnodb_buffer_pool_instances = 1innodb_data_file_path = ibdata1:100M:autoextendinnodb_flush_log_at_trx_commit = 2innodb_log_buffer_size = 8Minnodb_log_file_size = 100Minnodb_log_files_in_group = 3innodb_max_dirty_pages_pct = 50innodb_file_per_table = 1innodb_rollback_on_timeoutinnodb_io_capacity = 2000transaction_isolation = READ-COMMITTEDinnodb_flush_method = O_DIRECTEOF

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

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

(9) 启动实例 3307

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

(10) 登录 3307 实例

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

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

(11) 修改初始密码

查看初始密码:

# grep "password" /data/mysql/mysql3307/data/error.log  2018-01-09T07:51:15.311189Z 1 [Note] A temporary password is generated for root@localhost: /+dYyouJn2/g

初始密码为: /+dYyouJn2/g 每次初始化密码都不会相同;

登录数据库修改密码为:unixfbi.com

# mysql -uroot -p 初始密码 -S /tmp/mysql3307.sock mysql> alter user user() identified by 'unixfbi.com';

或者:

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

3.MySQL 3308 实例部署

(1) 创建数据库相关目录
# mkdir -pv /data/mysql/mysql3308/{data,logs,tmp}
(2) 创建配置文件

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

cp /data/mysql/mysql3307/my3307.cnf    /data/mysql/mysql3308/my3308.cnfsed -i  's/3307/3308/g'   /data/mysql/mysql3308/my3308.cnf

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

# grep "3307" /data/mysql/mysql3308/my3308.cnf  port = 3307socket = /tmp/mysql3307.sockdatadir = /data/mysql/mysql3307/datatmpdir = /data/mysql/mysql3307/tmpport = 3307socket = /tmp/mysql3307.sockserver-id = 1003307log-bin = /data/mysql/mysql3307/logs/mysql-bin

(3) 修改相关目录限

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

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

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

(5) 启动实例 3308

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

(6) 登录 3308 实例

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

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

(7) 修改初始密码

查看初始密码:

# grep "password" /data/mysql/mysql3308/data/error.log 2018-01-09T09:00:33.711566Z 1 [Note] A temporary password is generated for root@localhost: 0L8fUEe,j,;w

初始密码为: 0L8fUEe,j,;w 每次初始化密码都不会相同;

登录数据库修改密码为:unixfbi.com

# mysql -uroot -p 初始密码 -S /tmp/mysql3308.sock mysql> alter user user() identified by 'unixfbi.com';

或者:

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

(8) 设置登录后标识

# cat > /etc/my.cnf << EOF[mysql]prompt="\u@\h:\p [\d]> " EOF

登录后的效果:

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

三、MySQL 多实例常用操作

1.MySQL 多实例常用命令

启动

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

停止

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

登录

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

2.MySQL 常用命令介绍

方式一:

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

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

方式二:

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

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

方式三:

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

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

参考文档
转:

转载于:https://blog.51cto.com/moerjinrong/2133061

你可能感兴趣的文章
数据库中快速备份一个表的数据,或者只备份表结构
查看>>
vue-cli
查看>>
文件处理
查看>>
代码调试包Infragistics Windows Forms Test Automation发布v16.1|附下载
查看>>
我的友情链接
查看>>
Android中自定义样式与View的构造函数中的第三个参数defStyle的意义
查看>>
Eclipse中提高Android SDK Manager下载速度方法
查看>>
五、Storm入门之Bolt
查看>>
web开发插入数据时控制台没报错,可能是数据库表被锁了
查看>>
python_day11のPython操作 pymysql && SQLAchemy
查看>>
格式化输出
查看>>
42幅非常有创意的食品广告欣赏(上篇)
查看>>
SQL性能优化
查看>>
TCP/UDP穿越NAT的P2P通信方法(Hole Punching)
查看>>
django对数据库操作的封装
查看>>
python实现linux下指定目录下文件中的单词个数统计
查看>>
SQL SERVER存储过程中如何使用事务与try catch
查看>>
没什么不可能:剿灭Windows下的29个烦恼
查看>>
String,StringBuffer,StringBuilder的整理
查看>>
mysql 字符截取 实列
查看>>