-
centos7 MySQL5.7 多实例安装教程
2020-12-25 18:03:45各个实例之间是相互独立的,每个实例的datadir, port, socket, pid都是不同的。 2、多实例特点 2.1 有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。 2.2 资源互相抢占问题,...参考链接:https://www.cnblogs.com/jpfss/p/8144630.html
1、背景
MySQL数据库的集中化运维,可以通过在一台服务器上,部署运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。各个实例之间是相互独立的,每个实例的datadir, port, socket, pid都是不同的。
2、多实例特点
2.1 有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
2.2 资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降。3、环境
必须关闭selinux
[root@node2 local]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@node2 local]# uname -r 3.10.0-1160.11.1.el7.x86_64 [root@MySQL ~]# getenforce Disabled
4、部署 [ 4个实例 ]
4.1 下载 MySQL 5.7 二制包 [ 推荐官方下载 ] 此下载版本大于5.7.5
[root@node2 ~]# wget wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz
4.2 解压 MySQL 5.7 二进制包到指定目录
[root@node2 ~]# tar zxvf mysql-5.7.18-linux-glibc2.5-x86_64.tar.gz -C /usr/local/
4.3 创建 MySQL 软链接
[root@node2 ~]# mv /usr/local/mysql-5.7.18-linux-glibc2.5-x86_64 /usr/local/mysql
4.4 创建 MySQL 用户
[root@node2 ~]# useradd -r -s /sbin/nologin mysql
4.5 在 MySQL 二进制包目录中创建 mysql-files 目录 [MySQL 数据导入/导出数据专放目录]
[root@node2 ~]# mkdir -v /usr/local/mysql/mysql-files mkdir: created directory `/usr/local/mysql/mysql-files'
4.6 创建多实例数据目录
[root@node2 local]# mkdir -vp /data/mysql/data{3306..3309} mkdir: 已创建目录 "/data/mysql" mkdir: 已创建目录 "/data/mysql/data3306" mkdir: 已创建目录 "/data/mysql/data3307" mkdir: 已创建目录 "/data/mysql/data3308" mkdir: 已创建目录 "/data/mysql/data3309"
4.7 修改 MySQL 二进制包目录的所属用户与所属组
[root@node2 local]# chown mysql.mysql /usr/local/mysql/ -R [root@node2 local]# chown mysql.mysql /data/mysql -R
4.8 配置 MySQL 配置文件 /etc/my.cnf
[mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld mysqladmin = /usr/local/mysql/bin/mysqladmin log = /tmp/mysql_multi.log [mysqld3306] datadir = /data/mysql/data3306 # 设置数据目录 [多实例中一定要不同] socket = /tmp/mysql-3306.sock # 设置sock存放文件名 [多实例中一定要不同] port = 3306 # 设置监听开放端口 [多实例中一定要不同] user = mysql # 设置运行用户 innodb_buffer_pool_size = 32M # 设置innodb 缓存大小 sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' [mysqld3307] datadir = /data/mysql/data3307 socket = /tmp/mysql-3307.sock port = 3307 user = mysql innodb_buffer_pool_size = 32M sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' [mysqld3308] datadir = /data/mysql/data3308 socket = /tmp/mysql-3308.sock port = 3308 user = mysql innodb_buffer_pool_size = 32M sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' [mysqld3309] datadir = /data/mysql/data3309 socket = /tmp/mysql-3309.sock port = 3309 user = mysql innodb_buffer_pool_size = 32M sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
4.9 初始化各个实例 [ 初始化完成后会自带随机密码在输出日志中 ]
[root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3306 [root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3307 [root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3308 [root@node2 ~]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3309
注意:初始化的时候会输出密码,记录下来:2020-12-25T06:39:00.288011Z 1 [Note] A temporary password is generated for root@localhost: dfIx98z,3fj(
4.10 各实例开启 SSL 连接
[root@node2 ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3306 [root@node2 ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3307 [root@node2 ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3308 [root@node2 ~]# /usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data3309
- 复制多实例脚本到服务管理目录下 [ /etc/init.d/ ]
[root@node2 ~]# cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi
4.11 添加脚本执行权限
[root@node2 ~]# chmod +x /etc/init.d/mysqld_multi
4.12 添加进service服务管理和配置环境变量
[root@node2 ~]# chkconfig --add mysqld_multi [root@node2 ~]# echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile [root@node2 ~]# source /etc/profile
4.13 启动多实例
[root@node2 local]# /usr/local/mysql/bin/mysqld_multi start #开启多实例 [root@node2 local]# /usr/local/mysql/bin/mysqld_multi report #查看全部实例状态 [root@node2 local]# /usr/local/mysql/bin/mysqld_multi start 3306 #启动单个实例 [root@node2 local]# /usr/local/mysql/bin/mysqld_multi stop 3306 #停止单个实例 [root@node2 local]# /usr/local/mysql/bin/mysqld_multi report Reporting MySQL servers MySQL server from group: mysqld3306 is running MySQL server from group: mysqld3307 is running MySQL server from group: mysqld3308 is running MySQL server from group: mysqld3309 is running
4.14 查看实例监听端口
[root@node2 local]# netstat -lntp | grep mysqld tcp6 0 0 :::3306 :::* LISTEN 8898/mysqld tcp6 0 0 :::3307 :::* LISTEN 8901/mysqld tcp6 0 0 :::3308 :::* LISTEN 8904/mysqld tcp6 0 0 :::3309 :::* LISTEN 8907/mysqld
5. 连接测试
实例3306测试:
[root@node2 local]# mysql -uroot -p -S /tmp/mysql-3306.sock Enter password: #输入4.9 初始化输出的密码 Server version: 5.7.18 MySQL Community Server (GPL) .................. mysql> set password for root@'localhost'=password('123456'); mysql> flush privileges; mysql> create database test ; #可以看到该实例的data目录下多了一个test库
其他实例连接:
[root@node2 local]# mysql -uroot -p -S /tmp/mysql-3307.sock [root@node2 local]# mysql -uroot -p -S /tmp/mysql-3308.sock [root@node2 local]# mysql -uroot -p -S /tmp/mysql-3309.sock
遇到的问题:
/usr/local/mysql/bin/mysqld_multi stop 3306 停止3306实例无效。
解决: 自己写一个脚本来实现启停功能
#先把密码存放到一个安全的文件里面echo '123456' > /etc/mysql.pass chmod 600 /etc/mysql.pass vim /etc/init.d/mysqld_manager #以后就可以通过这个脚本来管理mysql了 #!/bin/bash tag=$1 port=$2 mysqld_multi="/usr/local/mysql/bin/mysqld_multi" sql="/usr/local/mysql/bin/mysql" sqladmin="/usr/local/mysql/bin/mysqladmin" if [ "$tag" == "start" ] && [ "$port" == '' ];then $mysqld_multi start else case "$tag" in 'start' ) $mysqld_multi start $port ;; 'stop' ) $sqladmin -uroot -p`cat /etc/mysql.pass` -S /tmp/mysql-$port.sock shutdown ;; 'report' ) $mysqld_multi report $port ;; 'restart' ) $sqladmin -uroot -p`cat /etc/mysql.pass` -S /tmp/mysql-$port.sock shutdown $mysqld_multi start $port ;; *) echo "Usage: $0 {start|stop|report|restart}" >&2 ;; esac fi #赋权 chmod 755 /etc/init.d/mysqld_manager
-
如何在IDEA启动多个Spring Boot工程实例
2017-07-30 22:27:01在我讲解的案例中,经常一个工程启动多个实例,分别占用不同的端口,有很多读者百思不得其解,在博客上留言,给我发邮件,加我微信询问。所以有必要在博客上记录下,方便读者。step 1在IDEA上点击Application右边的...转载请标明出处:
https://blog.csdn.net/forezp/article/details/76408139
本文出自方志朋的博客个人博客纯净版:https://www.fangzhipeng.com/architecture/2017/08/10/idea-boot-instances.html
在我讲解的案例中,经常一个工程启动多个实例,分别占用不同的端口,有很多读者百思不得其解,在博客上留言,给我发邮件,加我微信询问。所以有必要在博客上记录下,方便读者。
step 1
在IDEA上点击Application右边的下三角
,弹出选项后,点击Edit Configurationstep 2
打开配置后,将默认的Single instance only(单实例)的钩去掉。
step 3
通过修改application文件的server.port的端口,启动。多个实例,需要多个端口,分别启动。
更多阅读
扫码关注公众号有惊喜(转载本站文章请注明作者和出处 方志朋的博客)
-
C++编程实例100篇
2013-08-28 10:48:45C++编程实例100篇,里面有很多很基础的编程实例,可以作为参考。 -
Spring和ActiveMQ的整合实例源码
2015-09-26 15:37:45此实例基于Spring+JMS+ActiveMQ+Tomcat,注解的完整实例,包含jar包 -
实例变量共享造成的非线程安全问题
2020-09-12 23:46:35文章目录不共享实例变量共享实例变量解决方案 不共享实例变量 测试代码 public class MyThreadNotShared extends Thread { private int count = 5; public MyThreadNotShared(String name){ super(); this.set...不共享实例变量
测试代码
public class MyThreadNotShared extends Thread { private int count = 5; public MyThreadNotShared(String name){ super(); this.setName(name); } @Override public void run() { super.run(); while (count > 0) { count--; System.out.println("Thread is " + this.currentThread().getName() + ", count is " + count); } } } public class TestInstanceNotShared { public static void main(String[] args) { Thread a = new MyThreadNotShared("A"); Thread b = new MyThreadNotShared("B"); Thread c = new MyThreadNotShared("C"); a.start(); b.start(); c.start(); } } # 输出: Thread is A, count is 4 Thread is C, count is 4 Thread is B, count is 4 Thread is C, count is 3 Thread is A, count is 3 Thread is A, count is 2 Thread is C, count is 2 Thread is B, count is 3 Thread is C, count is 1 Thread is C, count is 0 Thread is A, count is 1 Thread is A, count is 0 Thread is B, count is 2 Thread is B, count is 1 Thread is B, count is 0
程序创建了3个线程,每个线程都有各自的count变量,不存在多个线程访问同一个实例变量问题。
共享实例变量
测试代码
public class MyThreadShared extends Thread { private int count = 5; @Override public void run() { super.run(); count--; System.out.println("Thread is " + this.currentThread().getName() + ", count is " + count); } } public class TestInstanceShared { public static void main(String[] args) { MyThreadShared myThread = new MyThreadShared(); Thread a = new Thread(myThread,"A"); Thread b = new Thread(myThread,"B"); Thread c = new Thread(myThread,"C"); Thread d = new Thread(myThread,"D"); Thread e = new Thread(myThread,"E"); a.start(); b.start(); c.start(); d.start(); e.start(); } } # 输出: Thread is A, count is 3 Thread is E, count is 0 Thread is D, count is 1 Thread is B, count is 3 Thread is C, count is 2
A线程和B线程获取到的count都是3,出现了非现场安全问题。
对count的值处理分为3步(执行这些步骤的过程中会被其他线程所打断):
1、获取count的值;
2、计算count-1;
3、计算结果对count赋值。
A线程和B线程得出相同值的过程如下:
线程/时间 1 2 3 4 5 6 7 A 5 4 4 B 5 4 4 1、在时间单位为1处,A线程取得count变量的值为5。
2、在时间单位为2处,B线程取得count变量的值为5。
3、在时间单位为3处,A线程执行count–计算,将计算后的值4存储到临时变量中。
4、在时间单位为4处,B线程执行count–计算,将计算后的值4也存储到临时变量中。
5、在时间单位为5处,A线程将临时变量中的值4赋值给count。
6、在时间单位为6处,B线程将临时变量中的值4也赋值给count。
7、最终结果就是A线程和B线程得到相同的计算结果4,非线程安全问题出现了。
解决方案
增加synchronized关键字
-
uml实例uml实例uml实例uml实例uml实例
2009-06-22 17:48:02uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例uml实例 -
198个经典C#WinForm实例源码 超赞的完整版
2013-07-14 18:27:44"198个经典C#WinForm实例源码"包括: 1-窗体技巧 2-控件操作 3-图像操作 4-报表打印 5-系统操作 6-文件处理 7-网络操作 8-数据库操作 9-加密解密 10-硬件读写 11-游戏设计 "超赞的198个经典C#WinForm实例源码.zip " ... -
SpringMVC+Hibernate+Spring整合实例
2013-05-31 15:49:34SpringMVC+Hibernate+Spring整合实例源码下载,很完整的例子,需要的可以下载源码学习 -
SSH1框架搭建实例
2013-04-25 09:57:11SSH1框架搭建实例(spring2+struts1+hibernate3)采用旧版本 以资源分销系统物料维护为原型做实例。包括物料的增删改查。包括登录界面。 -
docker常规操作——启动、停止、重启容器实例
2018-07-02 21:17:09前几篇我们已经掌握了docker容器实例的运行,接下来我们就来了解一下关于容器实例的 启动、停止、重启。 一、启动一个已经停止的容器实例 docker start 容器ID或容器名 1. 先查看已经暂停的容器实例信息 2. ...本系列目录请看这里
https://blog.csdn.net/michel4liu/article/details/80819510
前几篇我们已经掌握了docker容器实例的运行,接下来我们就来了解一下关于容器实例的 启动、停止、重启。
一、启动一个已经停止的容器实例
docker start 容器ID或容器名
1. 先查看已经暂停的容器实例信息
2. 通过docker start 59ec 启动容器
3. 通过docker ps 查看当前启动的容器
具体操作如下图
docker start 还有两个参数
-i:以 交互模式启动 交互模式不懂点我
-t:以 附加进程方式启动 附加进程不懂的点我二、停止一个正在运行的容器
1、docker stop 此方式常常被翻译为优雅的停止容器docker stop 容器ID或容器名
参数 -t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
docker stop -t=60 容器ID或容器名2、docker kill
docker kill 容器ID或容器名 :直接关闭容器
由此可见stop和kill的主要区别:stop给与一定的关闭时间交由容器自己保存状态,kill直接关闭容器
想更进一步了解处理机制的可以看下面这篇文章,比较详细但是需要其他方面的
https://www.jb51.net/article/96617.htm三、重启一个容器
docker restart 容器ID或容器名 :不管容器是否启动,直接重启容器
1. 首先 docker ps 查看正在运行的容器信息,显示2分钟前启动运行
2. docker restart 59ec 重启容器
3. 再次 docker ps 查看容器信息 显示 2秒前启动运行
docker restart 参数
-t:关闭容器的限时,如果超时未能关闭则用kill强制关闭,默认值10s,这个时间用于容器的自己保存状态
本系列目录请看这里
https://blog.csdn.net/michel4liu/article/details/80819510
-
vc界面编程经典实例
2013-03-28 10:45:23常用的vc界面编程经典实例,包含上百个实例的整理文档。常用的vc界面编程经典实例,包含上百个实例的整理文档。常用的vc界面编程经典实例,包含上百个实例的整理文档。常用的vc界面编程经典实例,包含上百个实例的... -
Java爬虫,信息抓取的实现 完整实例源码
2014-04-09 15:56:19Java爬虫,信息抓取的实现 详细完整源码实例打包给大家,需要的可以下载下载学习!!! -
Spring MVC 基础实例源码01
2013-05-09 13:45:30Spring MVC 基础实例源码01 我的博客上SpringMVC基础教程 实例的源码 -
快速入门(完整):Python实例100个(基于最新Python3.7版本)
2018-08-10 16:01:27实例002:“个税计算” 实例003:完全平方数 实例004:这天第几天 实例005:三数排序 实例006:斐波那契数列 实例007:copy 实例008:九九乘法表 实例009:暂停一秒输出 实例010:给人看的时间 实例011:养兔子 实例... -
VC++MFC小游戏实例教程(实例)+MFC类库详解
2013-09-12 18:39:38VC++MFC小游戏实例教程(实例)+MFC类库详解 免费下载 -
完整HTML实例网页代码(1)
2019-04-21 10:18:51该实例里面有设置了css的样式设置,有div的 样式格局,同样的也有js的动画效果,这个实例比较全面,有助于同学的学习。 本实例仅供参考,其他行为自负。 本实例分为四篇来观看。一共有一个HTML文件,三个css样式表... -
Spring解析,加载及实例化Bean的顺序(零配置)
2018-02-16 14:23:31Spring零配置下@Bean,@Import,@ComponentScan形式定义Bean的解析,加载及实例化顺序 -
四、db2创建实例、删除实例、列出实例
2019-08-18 11:08:381、打开命令窗口: db2ilist ---列出主机所有实例 db2icrt instanceName ---创建实例名为instanceName的实例 db2idrop instanceName ---删除实例名为instanceName的实例 ... -
阿里云—登录实例失败,原因: 连接实例 超时
2020-02-09 23:11:23登录实例失败,原因: 连接实例 i-bp1gu0zjsunjrzw3ih1h (47.98.154.117:22) 超时: 10 秒,请检查网络是否可达或者白名单设置 通过公网IP或者EIP访问实例需要在实例安全组白名单中增加 Workbench的服务器公网... -
默认实例和命名实例
2016-11-16 21:17:56SQL Server 的默认实例和命名实例的文件位置 SQL Server 2016 and later 其他版本 适用于: SQL Server 2016 安装 SQL Server 将安装一个或多个单独的实例。 无论是默认实例... -
Python进阶(十一)-定义实例方法
2017-03-17 17:09:09Python进阶(十一)-定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外部访问。那这些属性定义有什么用? 虽然私有属性无法从外部访问,但是,从类的内部是可以访问的。除了可以定义实例的属性外... -
实例属性
2018-08-29 08:02:38实例属性: attribute(也叫实例变量) 实例属性 每个实例都可以有自己的变量用来保存对象自己的数据,称为实例变量(也叫属性) 语法: 实例.属性名 赋值规则同变量的赋值规则 首次为属性赋值,则创建此属性 ... -
Spring Cloud升级之路 - Hoxton - 8. 修改实例级别的熔断为实例+方法级别
2020-07-14 10:24:08实例级别的熔断带来的困扰 如之前系列(Spring Cloud升级之路 - Hoxton - 4. 使用Resilience4j实现实例级别的隔离与熔断)所述,我们实现了实例级别的熔断。但是在生产中发现,并不是所有情况下都表现良好。首先如果... -
实例方法
2018-08-29 08:03:02实例方法(method) 实例方法 * 语法: class 类名(继承列表): def 实例方法名(self, 形参名1,形参名2,....): '方法文档字符串' 语句块 作用: 用于描述一个对象的行为,让此类型的全部对象都拥有相同... -
C#面向对象_静态和实例,静态类和实例类,静态成员和实例成员
2020-12-12 14:23:04一、C#静态和实例概念 静态概念:公共的、全局的、不属于个别实例的定义。 实例概念:new 出来的具体单个对象。随着作用域定义,使用,销毁(多数实例,通过垃圾回收机制自动销毁)。 静态 实例 关键字... -
oracle命令行查看实例名实例状态
2019-06-04 21:41:36查看实例名: select name from v$database; select instance_name from v$instance; 查看实例状态: SQL> select status from v$instance; STATUS ------------------------ STARTED SQL> alter ... -
oracle 多个实例互相切换实例
2018-06-12 21:35:32如需要连接实例a,则设置ORACLE_SID=a 如需要连接实例b,则设置ORACLE_SID=b例子:set ORACLE_SID=a //windows中设置实例为aexport ORACLE_SID=a //linux中设置实例为asqlplus / as sysdba //启动sqlplus... -
jQuery的Ajax实例(附完整代码)
2019-02-02 13:53:25目录写在前边什么是AjaxAjax基本结构实例实例1实例2小结 写在前边 作为一个前端刚入门没多久的小白,想在这里分享一下我的学习内容,就算是学习笔记了。因为前端的大部分学习都是通过网站上的教程,所以遇到不懂得... -
Android 制作抽奖转盘 源码实例
2014-12-04 14:19:10案例为博客的实例代码:http://blog.csdn.net/lmj623565791/article/details/41722441 有问题请博客留言。 -
springboot如何bean注入实例。如何使用多实例
2019-05-25 15:32:40提前创建好实例能够节约内存空间,使用起来也更加方便。 静态数据和配置信息适合使用提前创建实例模式 springboot 如何创建实例? springboot 使用@Bean 创建实例 @Bean是一个方法级别的注解,主要在@...