精华内容
下载资源
问答
  • centos7 MySQL5.7 多实例安装教程

    万次阅读 2020-12-25 18:03:45
    1、背景 MySQL数据库的集中化运维,可以通过在一台服务器上...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 
    
    展开全文
  • MySQL多实例

    千次阅读 2018-08-02 14:09:13
    MySQL多实例 为什么要使用多实例 MySQL启动方式之间的关系 MySQL多实例启动及关闭的方式 1. 为什么要使用多实例 物理机性能强大,单个项目无法把资源使用完 资源隔离,减少相互影响 分担连接数 MySQL随着...

    MySQL多实例

    • 为什么要使用多实例

    • MySQL启动方式之间的关系

    • MySQL多实例启动及关闭的方式

    1. 为什么要使用多实例

    • 物理机性能强大,单个项目无法把资源使用完

    • 资源隔离,减少相互影响

    • 分担连接数
      MySQL随着连接数上升,性能会出现下降

    • 更充分的利用资源
      不同的业务错高峰混跑

    2. MySQL启动方式之间的关系

    2.1 MySQL读取配置文件的顺序

     # 从左往右读,后面的配置文件会把前面的进行覆盖
    
     /etc/my.cnf 》/etc/mysql/my.cnf 》/usr/local/mysql/etc/my.cnf 》~/.my.cnf 
    
     # mysqld --verbose --help|grep my.cnf
     /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
                          my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
    

    【提示】:启动mysql时,加上--defaults-file参数,可以指定只加载指定位置的配置文件

    • 通过--print-defaults输出mysqld加载的参数
    # mysqld --print-defaults
    mysqld would have been started with the following arguments:
    --user=mysql --port=3306 --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --tmpdir=/data/mysql/mysql3306/tmp --socket=/tmp/mysql3306.sock --pid-file=mysqldb1.pid ...

    2.2 MySQL启动方式

    标准方式

     service mysql start
     # or
     /etc/init.d/mysql start
    

    以下三种方式,可用于启动多实例

    mysqld_safe --defaults-file=/etc/my.cnf &
    mysqld --defaults-file=/etc/my.cnf &
    mysqld_multi start 3306

    2.3 MySQL启动方式之间的关系

    service mysqld start -> 实际上调用的是mysqld_safe

    mysqld_safe -> 调用的是mysqld

    service mysqld:主要是为了能够让mysql能够自启动,但实际环境中很少有环境使用自动启动的
    mysqld_safe:实际上在mysqld上基础上多起了一个守护进程,如果mysqld异常挂掉了,他会自动再起一个mysqld

    示例1:

     以mysqld_safe启动mysql,然后手动kill mysql进程,观察进程是否自动启动
    
     # mysqld_safe --defaults-file=/etc/my.cnf &
    
     [root@mysqldb1 15:20:51 /root]
     # ps -ef|grep mysql
     root      7992  7905  0 14:09 pts/2    00:00:00 mysql
     root     17206     1  1 15:20 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
     mysql    18722 17206 13 15:20 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3306/error.log --open-files-limit=65535 --pid-file=/datamysql/mysql3306/data/mysqldb1.pid --socket=/tmp/mysql3306.sock --port=3306
     root     18772  7857  0 15:20 pts/0    00:00:00 grep --color=auto mysql
    
     [root@mysqldb1 15:20:56 /root]
     # kill -9 18722 
    
     [root@mysqldb1 15:21:04 /root]
     # ps -ef|grep mysql
     root      7992  7905  0 14:09 pts/2    00:00:00 mysql
     root     17206     1  0 15:20 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
     mysql    18798 17206  3 15:21 pts/0    00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3306/error.log --open-files-limit=65535 --pid-file=/datamysql/mysql3306/data/mysqldb1.pid --socket=/tmp/mysql3306.sock --port=3306
     root     18852  7857  0 15:21 pts/0    00:00:00 grep --color=auto mysql
    
     【注意】:要实现守护进程,需先往系统中注册服务,chkconfig mysql off
    
     # chkconfig
    
     Note: This output shows SysV services only and does not include native
           systemd services. SysV configuration data might be overridden by native
           systemd configuration.
    
           If you want to list systemd services use 'systemctl list-unit-files'.
           To see services enabled on particular target use
           'systemctl list-dependencies [target]'.
    
     mysql              0:off   1:off   2:off   3:off   4:off   5:off   6:off
     netconsole         0:off   1:off   2:off   3:off   4:off   5:off   6:off
     network            0:off   1:off   2:on    3:on    4:on    5:on    6:off

    2.4 mysqld_multi和其他启动方式关系

    mysqld_multi:实际上调用的是mysqld_safe或者mysqld

    3. MySQL多实例启动及关闭的方式

    3.1 安装多实例注意事项

    应当注意的参数:

    port = 3306
    socket = /tmp/mysql3306.sock
    server-id = 1003306
    datadir = /data/mysql/mysql3306/data
    tmpdir = /data/mysql/mysql3306/tmp
    log-bin = /data/mysql/mysql3306/logs/my3306_binlog

    3.2 多实例启动方式

    有三种方式:

    mysqld_safe --defaults-file=/etc/my.cnf &
    
    mysqld --defaults-file=/etc/my.cnf &
    
    mysqld_multi

    下面重点介绍mysqld_multi

    • mysqld_multi 是perl实现的通过mysqld_safe或mysqld来启动实例;通过调用mysqladmin实现多实例启动关闭的一组脚本程序

    • 需要在配置文件中声明:[mysqld_multi] ,[mysqldN],其中[mysqldN]这部分定义会覆盖[mysqld]

    • mysqld_multi启动的实例N的参数是[mysqld] + [mysqldN]两部分的组合

    3.3 mysqld_multi配置文件和其他方式的区别


    mysqld_multi mysqld_safe
    mysqld
    配置文件位置 /etc/my.cnf
    (可以指定)
    /path/filename.cnf
    (可以指定)
    配置文件结构区别 [client]
    [mysql]
    [mysqld_multi]
    [mysqld]
    [mysqldN1]
    [mysqldN2]
    [mysqldN..]
    [mysqld_safe]
    [client]
    [mysql]
    [mysqld]
    [mysqld_safe]

    3.4 mysqld_multi需要的参数

    参数

    [mysqld_multi]
    mysqld = /usr/local/mysql/bin/mysqld_safe
    mysqladmin = /usr/local/mysql/bin/mysqladmin
    user=root
    password=mysql
    log=/tmp/mysqld_multi.log
    
    [mysqld3306]
    port=3306
    datadir=/data/mysql/mysql3306/data
    tmpdir  = /data/mysql/mysql3306/tmp
    socket=/tmp/mysql3306.sock
    server-id=1003306
    log-bin=/data/mysql/mysql3306/logs/my3306_binlog

    调用方式

    mysqld_multi [OPTIONS] {start|reload|stop|report} [GNR,GNR,GNR...]

    3.5 多实例启动与关闭示例

    3.5.1 利用mysqld , mysqld_safe分别启动与关闭实例3306,3307

    #1. 初始化3307实例
    
    # mkdir /data/mysql/mysql3307/{data,logs,tmp} -p
    # chown -R mysql:mysql /data/mysql/mysql3307
    # cp my3306.cnf my3307.cnf
    # sed -i 's/3306/3307/g' /etc/my3307.cnf
    # /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf --initialize
    # /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf &
    
    #查看errorr日志,获取临时密码,并输入
    # /usr/local/mysql/bin/mysql -S /tmp/mysql3307.sock -p
    
    root [(none)] 12:41:41>alter user user() identified by 'mysql';
    # mysqladmin -S /tmp/mysql3307.sock shutdown
    # mysqladmin -S /tmp/mysql3306.sock shutdown
    
    
    #2. 启动与关闭3306,3307
    
    #启动
    # /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf &
    # /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf &
    
    # ps -ef|grep mysql
    avahi      667     1  0 09:19 ?        00:00:00 avahi-daemon: running [mysqldb1.local]
    mysql     7737  3021 14 12:45 pts/0    00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3306.cnf
    mysql     7781  3021 16 12:45 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf
    root      7826  3021  0 12:45 pts/0    00:00:00 grep --color=auto mysql
    
    #登陆测试
    # mysql -S /tmp/mysql3306.sock 
    
    root@localhost [(none)] 12:46:35>\s
    --------------
    mysql  Ver 14.14 Distrib 5.7.23, for linux-glibc2.12 (x86_64) using  EditLine wrapper
    
    Connection id:      2
    Current database:   
    Current user:       root@localhost
    SSL:            Not in use
    Current pager:      stdout
    Using outfile:      ''
    Using delimiter:    ;
    Server version:     5.7.23-log MySQL Community Server (GPL)
    Protocol version:   10
    Connection:     Localhost via UNIX socket
    Server characterset:    utf8mb4
    Db     characterset:    utf8mb4
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:        /tmp/mysql3306.sock
    Uptime:         1 min 18 sec
    
    Threads: 1  Questions: 6  Slow queries: 0  Opens: 110  Flush tables: 1  Open tables: 16  Queries per second avg: 0.076
    
    
    
    # mysql -S /tmp/mysql3307.sock 
    
    root@localhost [(none)] 12:47:14>\s
    --------------
    mysql  Ver 14.14 Distrib 5.7.23, for linux-glibc2.12 (x86_64) using  EditLine wrapper
    
    Connection id:      2
    Current database:   
    Current user:       root@localhost
    SSL:            Not in use
    Current pager:      stdout
    Using outfile:      ''
    Using delimiter:    ;
    Server version:     5.7.23-log MySQL Community Server (GPL)
    Protocol version:   10
    Connection:     Localhost via UNIX socket
    Server characterset:    utf8mb4
    Db     characterset:    utf8mb4
    Client characterset:    utf8
    Conn.  characterset:    utf8
    UNIX socket:        /tmp/mysql3307.sock
    Uptime:         1 min 51 sec
    
    Threads: 1  Questions: 6  Slow queries: 0  Opens: 110  Flush tables: 1  Open tables: 16  Queries per second avg: 0.054
    --------------
    
    #关闭
    # mysqladmin -S /tmp/mysql3307.sock shutdown
    # mysqladmin -S /tmp/mysql3306.sock shutdown
    
    # ps -ef|grep mysql
    avahi      667     1  0 09:19 ?        00:00:00 avahi-daemon: running [mysqldb1.local]
    root      7934  3021  0 12:50 pts/0    00:00:00 grep --color=auto mysql
    

    3.5.2 利用mysqld_multi启动与关闭实例3306,3307

    #1. 修改/etc/my.cnf,添加以下内容
    
    [mysqld_multi]
    mysqld = /usr/local/mysql/bin/mysqld_safe
    mysqladmin = /usr/local/mysql/bin/mysqladmin
    user=root
    password=mysql
    log=/tmp/mysqld_multi.log
    
    [mysqld3306]
    port=3306
    datadir=/data/mysql/mysql3306/data
    socket=/tmp/mysql3306.sock
    server-id=1003306
    log-bin=/data/mysql/mysql3306/logs/my3306_binlog
    slow_query_log_file = /data/mysql/mysql3306/slow.log
    log-error = /data/mysql/mysql3306/error.log
    
    
    [mysqld3307]
    port=3307
    datadir=/data/mysql/mysql3307/data
    socket=/tmp/mysql3307.sock
    server-id=1003307
    log-bin=/data/mysql/mysql3307/logs/my3307_binlog
    slow_query_log_file = /data/mysql/mysql3307/slow.log
    log-error = /data/mysql/mysql3307/error.log
    
    
    #2. 启动3306,3307
    
    # mysqld_multi start 3306,3307
    
    # ps -ef|grep mysql
    avahi      667     1  0 09:19 ?        00:00:00 avahi-daemon: running [mysqldb1.local]
    root      8067     1  1 12:59 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3306 --datadir=/data/mysql/mysql3306/data --socket=/tmp/mysql3306.sock --server-id=1003306 --log-bin=/data/mysql/mysql3306/logs/my3306_binlog --slow_query_log_file=/data/mysql/mysql3306/slow.log --log-error=/data/mysql/mysql3306/error.log
    root      8073     1  2 12:59 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3307 --datadir=/data/mysql/mysql3307/data --socket=/tmp/mysql3307.sock --server-id=1003307 --log-bin=/data/mysql/mysql3306/logs/my3307_binlog --slow_query_log_file=/data/mysql/mysql3307/slow.log --log-error=/data/mysql/mysql3307/error.log
    mysql    11233  8067 24 12:59 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=1003306 --log-bin=/data/mysql/mysql3306/logs/my3306_binlog --slow-query-log-file=/data/mysql/mysql3306/slow.log --log-error=/data/mysql/mysql3306/error.log --open-files-limit=65535 --pid-file=mysqldb1.pid --socket=/tmp/mysql3306.sock --port=3306
    mysql    11237  8073 28 12:59 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=1003307 --log-bin=/data/mysql/mysql3306/logs/my3307_binlog --slow-query-log-file=/data/mysql/mysql3307/slow.log --log-error=/data/mysql/mysql3307/error.log --open-files-limit=65535 --pid-file=mysqldb1.pid --socket=/tmp/mysql3307.sock --port=3307
    root     11315  3021  0 13:00 pts/0    00:00:00 grep --color=auto mysql
    
    #3. 用ss查看监听端口是否启用
    # ss -nlp|grep mysqld
    u_str  LISTEN     0      128    /tmp/mysql3306.sock 50212                 * 0                   users:(("mysqld",pid=11233,fd=122))
    u_str  LISTEN     0      128    /tmp/mysql3307.sock 50215                 * 0                   users:(("mysqld",pid=11237,fd=119))
    tcp    LISTEN     0      128      :::3306                 :::*                   users:(("mysqld",pid=11233,fd=121))
    tcp    LISTEN     0      128      :::3307                 :::*                   users:(("mysqld",pid=11237,fd=118))
    
    
    #4. 登陆
    # mysql -S /tmp/mysql3307.sock
    # mysql -S /tmp/mysql3306.sock
    
    
    #5. 关闭mysql
    
    # mysqld_multi stop 3306,3307
    
    # ps -ef|grep mysql
    avahi      667     1  0 09:19 ?        00:00:00 avahi-daemon: running [mysqldb1.local]
    root      8067     1  0 12:59 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3306 --datadir=/data/mysql/mysql3306/data --socket=/tmp/mysql3306.sock --server-id=1003306 --log-bin=/data/mysql/mysql3306/logs/my3306_binlog --slow_query_log_file=/data/mysql/mysql3306/slow.log --log-error=/data/mysql/mysql3306/error.log
    root      8073     1  0 12:59 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3307 --datadir=/data/mysql/mysql3307/data --socket=/tmp/mysql3307.sock --server-id=1003307 --log-bin=/data/mysql/mysql3306/logs/my3307_binlog --slow_query_log_file=/data/mysql/mysql3307/slow.log --log-error=/data/mysql/mysql3307/error.log
    mysql    11233  8067  0 12:59 pts/0    00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=1003306 --log-bin=/data/mysql/mysql3306/logs/my3306_binlog --slow-query-log-file=/data/mysql/mysql3306/slow.log --log-error=/data/mysql/mysql3306/error.log --open-files-limit=65535 --pid-file=mysqldb1.pid --socket=/tmp/mysql3306.sock --port=3306
    mysql    11237  8073  0 12:59 pts/0    00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --server-id=1003307 --log-bin=/data/mysql/mysql3306/logs/my3307_binlog --slow-query-log-file=/data/mysql/mysql3307/slow.log --log-error=/data/mysql/mysql3307/error.log --open-files-limit=65535 --pid-file=mysqldb1.pid --socket=/tmp/mysql3307.sock --port=3307
    root     11581  3021  0 13:05 pts/0    00:00:00 grep --color=auto mysql
    
    #观察发现进程还在,查看mysqld_multi.log
    
    # tail -100f /tmp/mysqld_multi.log 
    
    mysqladmin: [Warning] Using a password on the command line interface can be insecure.
    mysqladmin: connect to server at 'localhost' failed
    error: 'Access denied for user 'root'@'localhost' (using password: YES)'
    mysqladmin: [Warning] Using a password on the command line interface can be insecure.
    mysqladmin: connect to server at 'localhost' failed
    error: 'Access denied for user 'root'@'localhost' (using password: YES)'
    
    #提示密码错误,但是密码确实是对的,怎么会错呢?
    
    #查看mysqld_multi.log源码
    
    # which mysqld_multi 
    /usr/local/mysql/bin/mysqld_multi
    
    # vim /usr/local/mysql/bin/mysqld_multi
    #搜索stop
    

    #搜索get_mysqladmin_options
    

    搜索defaults_for_group

    发现最终调用my_print_defaults程序,查看程序帮助
    
    # my_print_defaults --help
    使用默认文件Usage:my_print_defaults [OPTIONS] groups ,输出某些程序提供的所有参数
    
    Example usage:
    my_print_defaults --defaults-file=example.cnf client mysql
    
    # my_print_defaults --defaults-file=/etc/my.cnf client mysql mysqld_multi
    --port=3306
    --prompt=\U [\d] \R:\m:\s>
    --no-auto-rehash
    --mysqld=/usr/local/mysql/bin/mysqld_safe
    --mysqladmin=/usr/local/mysql/bin/mysqladmin
    --user=root
    --password=*****
    --log=/tmp/mysqld_multi.log
    
    #发现密码不是明文显示
    
    #加参数-s,再次查询
    # my_print_defaults -s --defaults-file=/etc/my.cnf client mysql mysqld_multi
    --port=3306
    --prompt=\U [\d] \R:\m:\s>
    --no-auto-rehash
    --mysqld=/usr/local/mysql/bin/mysqld_safe
    --mysqladmin=/usr/local/mysql/bin/mysqladmin
    --user=root
    --password=mysql
    --log=/tmp/mysqld_multi.log
    
    #修改mysqld_multi文件,在216行添加 -s                    
    
    #vim里面输入set nu 显示行数
    

    #再次尝试关闭数据库
    
    # mysqld_multi stop 3306,3307
    
    # ps -ef|grep mysql
    avahi      667     1  0 09:19 ?        00:00:00 avahi-daemon: running [mysqldb1.local]
    root     12152  4707  0 13:35 pts/2    00:00:00 tail -100f /tmp/mysqld_multi.log
    root     17252  3021  0 13:41 pts/0    00:00:00 grep --color=auto mysql
    
    # mysqld_multi report
    Reporting MySQL servers
    MySQL server from group: mysqld3306 is not running
    MySQL server from group: mysqld3307 is not running
    
    #已经能成功关闭数据库
    展开全文
  • activiti 多实例任务

    万次阅读 多人点赞 2016-04-25 09:15:18
    最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,在流程运转的时候,可能我们有这样的一个需求,在一个任务节点的时候,我们需要个人对这个节点进行审批...

    1.1.1. 前言

     

    分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519)

    我们在使用activiti 工作流引擎的时候,最常用的肯定是任务节点,因为在OA系统、审批系统、办公自动化系统中核心的处理就是流程的运转,在流程运转的时候,可能我们有这样的一个需求,在一个任务节点的时候,我们需要多个人对这个节点进行审批,比如实际中这样一个例子,假如是一个部门的投票,这个部门有5个人,那么当5个人都投票的时候大概分为如下几种:

    1.部门所有人都去投票,当所有人都投票完成的时候,这个节点结束,流程运转到下一个节点。(所有的人都需要投票)

    2.部门所有人都去投票,只要有任意2/3的人同意,这个节点结束,流程运转到下一个节点。(部分人投票只要满足条件就算完成)。

    3.部门中有一个部门经理,只要部门经理投票过了,这个节点结束,流程运转到下一个节点(一票否决权)。

    4.部门中根据职位不同,不同的人都不同的权重,当满足条件的时候,这个节点结束,流程运转到下一个节点。比如说所有的人员权重加起来是1,a有0.2的权重,其他的四个人分别是0.1的权重,我们可以配置权重达到0.3就可以走向下一个节点,换言之a的权重是其他人的2倍,那就是a的投票相当于2个人投票。这种需求还是很常见的。

    5.部门所有人都去投票,a投票结束到b,b开始投票结束到c,一直如此,串行执行。最终到最后一个人再统计结果,决定流程的运转。

    上面的五种情况,我们可以提取出来一些信息,我们的activiti 工作流引擎,必须支持如下功能,才能满足上面的需求:

    1.任务节点可以配置自定义满足条件。

    2.任务节点必须支持串行、并行。

    3.任务节点必须支持可以指定候选人或者候选组。

    4.任务节点必须支持可以循环的次数。

    5.任务节点必须支持可以自定义权重。

    6.任务节点必须支持加签、减签。(就是动态的修改任务节点的处理人)

    因为实际上的需求可能比上面的几种情况更加的复杂,上面的6个满足条件,工作流支持前4个,后面的2个条件是不支持的,所以我们必须要扩展activiti 工作流引擎才能使用5、6等的功能。下面我们将详细的介绍前四种条件的使用,在掌握基本使用之后,我们在后面的章节中将详细的介绍,5、6这两种功能以及可能更加复杂的操作。

     

    1.1.2. 串行、并行配置

    为了演示如何使用,我们采用由浅入深的使用,结合流程图、流程定义xml、以及代码和数据库的变化来阐释每一个配置的使用以及含义。

    流程的详细定义如下图所示:

     

    流程的详细定义xml如下所示:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="daling">
      <process id="daling" name="name_daling" isExecutable="true" activiti:candidateStarterUsers="a,b,c,d">
        <startEvent id="startevent1" name="Start"></startEvent>
        <userTask id="usertask1" name="多实例任务" activiti:candidateUsers="shareniu1,shareniu2,shareniu3,shareniu4">
          <multiInstanceLoopCharacteristics isSequential="true">
            <loopCardinality>2</loopCardinality>
          </multiInstanceLoopCharacteristics>
        </userTask>
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
        <endEvent id="endevent1" name="End"></endEvent>
        <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
      </process>
      <bpmndi:BPMNDiagram id="BPMNDiagram_daling">
        <bpmndi:BPMNPlane bpmnElement="daling" id="BPMNPlane_daling">
          <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
            <omgdc:Bounds height="35.0" width="35.0" x="180.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
            <omgdc:Bounds height="55.0" width="105.0" x="370.0" y="90.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
            <omgdc:Bounds height="35.0" width="35.0" x="650.0" y="130.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
            <omgdi:waypoint x="215.0" y="167.0"></omgdi:waypoint>
            <omgdi:waypoint x="422.0" y="145.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
            <omgdi:waypoint x="475.0" y="117.0"></omgdi:waypoint>
            <omgdi:waypoint x="667.0" y="130.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
      </bpmndi:BPMNDiagram>
    </definitions>

     

     

     

     

     

    xml配置文件的部分含义如下:

    1.activiti:candidateUsers="shareniu1,shareniu2,shareniu3,shareniu4" 这个节点可以4个人审核。

    2.<loopCardinality>2</loopCardinality> 循环2次结束。

    3.<multiInstanceLoopCharacteristics isSequential="true"> 串行并行的配置。

    1.1.2.1. 串行的配置

    修改<multiInstanceLoopCharacteristics isSequential="true"> 中的isSequential为true是串行,isSequential为false是并行。我们测试串行。下面的代码展示启动流程因为是以一个节点所以部署启动后,直接进入多实例任务。

    1.1.2.1.1. 流程的部署

     

    Deployment deploy = repositoryService2.createDeployment()
    .category(category).addClasspathResource("demo1.bpmn").deploy();

     

    1.1.2.1.2. 流程的启动

    /**

     *

     * @param runtimeService

     * @param key

     *            act_re_procdef表的Id

     * @param businessKey

     *            业务单号

     * @return

     */

    public ProcessInstance startProcessInstanceByKey(

    RuntimeService runtimeService, String key, String businessKey) {

    ProcessInstance processInstance = runtimeService

    .startProcessInstanceByKey(key, businessKey);

    return processInstance;

    }

    我们按照上面的步骤启动一个流程看一下数据库的变化。

    ACT_RU_TASK表的数据有了如下图所示:

     

    ACT_RU_IDENTITYLINK表的数据有了如下图所示:

     

    ACT_RU_IDENTITYLINK权限表中,确实把我们设置的人员信息设置进去了,shareniu1,shareniu2,shareniu3,shareniu4现在就有代办信息了。

    ACT_RU_VARIABLE表的数据有了如下图所示:

     

    上面重要的变量需要解释一下,要不然还真不好理解,多任务是怎么运转的。

    1.nrOfInstances  实例总数。

    2.nrOfCompletedInstances  当前还没有完成的实例 nr是number单词缩写 。

    3.loopCounter 已经循环的次数。

    4.nrOfActiveInstances 已经完成的实例个数。

     

    下面我们结束一个任务看一下,流程走到那个节点了。

    1.1.2.1.3. 完成任务

    String taskId="45009";

    demo.getTaskService().complete(taskId);

    接下来看一下数据库表的变化。

    ACT_RU_VARIABLE表的数据有了如下图所示:

     

     

    上面我们仔细的发现,可以看到

    nrOfCompletedInstances、loopCounter、nrOfActiveInstances都加1了,确实多任务就是参考这几个值的变化进行判断的。

    因为我们设置了循环2次,所以我们看看ACT_RU_IDENTITYLINK还有一个任务,因为我们是并行处理的。

    所以我们在结束新的任务看一下流程是不是真的结束了,如果结束了,那么我们循环次数的配置就是正确的。

    1.1.2.1.4. 完成任务

    String taskId="47502";

    demo.getTaskService().complete(taskId);

    下面看一下ACT_RU_TASK,里面没有任务信息了,所以侧面证明循环次数的配置就是正确的。

    接下来我们测试并行任务。除了isSequential="false",其他的配置是一样的。

    1.1.2.2. 并行的配置测试

    除了isSequential="false",其他的配置跟上面的串行是一样一样的。

    重新部署测试,部署后我们启动一个新的流程测试。

    ACT_RU_TASK表如下:

     

    一次性的有2个任务需要处理,因为我们循环的是2次,所以直接就是2个。

    ok串行、并行就讲解到这里。

     

    1.1.3. 串行、并行总结

    我们配置的是循环2次,看以看到不管是并行还是串行,两个代办任务结束之后,流程直接跳转到下一个状态,但是

    我们并没有配置结束条件,所以上面的例子,也可以看出来,如果不配置默认的通过条件,则默认条件是1,后面的源码章节会给大家说明这一点的。

     

    1.1.4. 通过条件的配置

    在上面的串行、并行实例中,我们没有设置通过条件,但是程序按照配置的循环的次数,然后跳转到了下一个状态,可以侧面印证,如果不配置通过条件则默认值就是1.

     

    下面的代码详细的介绍通过条件的配置,具体的配置代码如下:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="daling">
      <process id="daling" name="name_daling" isExecutable="true" activiti:candidateStarterUsers="a,b,c,d">
        <startEvent id="startevent1" name="Start"></startEvent>
        <userTask id="usertask1" name="多实例任务" activiti:candidateUsers="shareniu1,shareniu2,shareniu3,shareniu4">
          <multiInstanceLoopCharacteristics isSequential="false">
            <loopCardinality>4</loopCardinality>
            <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.25}</completionCondition>
          </multiInstanceLoopCharacteristics>
        </userTask>
        <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
        <endEvent id="endevent1" name="End"></endEvent>
        <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
      </process>
      <bpmndi:BPMNDiagram id="BPMNDiagram_daling">
        <bpmndi:BPMNPlane bpmnElement="daling" id="BPMNPlane_daling">
          <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
            <omgdc:Bounds height="35.0" width="35.0" x="180.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
            <omgdc:Bounds height="55.0" width="105.0" x="371.0" y="140.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
            <omgdc:Bounds height="35.0" width="35.0" x="660.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">
            <omgdi:waypoint x="215.0" y="167.0"></omgdi:waypoint>
            <omgdi:waypoint x="371.0" y="167.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
            <omgdi:waypoint x="476.0" y="167.0"></omgdi:waypoint>
            <omgdi:waypoint x="660.0" y="167.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
      </bpmndi:BPMNDiagram>
    </definitions>

     

     

     

     

     

    1.1.4.1. 配置描述

    <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.25}</completionCondition>

    nrOfCompletedInstances、nrOfInstances 变量描述上面已经描述了,我们这里设置的条件是大于1/4的人完成任务,任务就结束了。下面我们代码部署流程,启动流程后进行测试:

    ACT_RU_TASK表如下:

     

    我们随便结束一个任务,看一下ACT_RU_TASK表变化。

    String taskId="60038";

    demo.getTaskService().complete(taskId);

    执行上面的代码,我们很神奇的发现,ACT_RU_TASK表中的其他任务没有了,因为我们配置了4个人,通过条件是1/4,所以任意一个人结束了,流程就结束了。这里我们测试的是并行,串行也是一样的,读者可以自行测试验证。

    1.1.5. 动态的配置

    上面的几种方式,我们定义xml的时候,循环的次数是固定写在xml中的,也就是说我们配置的是循环2次,那么所有的流程实例都是循环2次,这样就不灵活了,程序当然是灵活了比较好,所以在实际开发中,我们可以使用下面的这种方式操作,使程序更加的灵活。

    程序的xml配置如下所示:

     

    <?xml version="1.0" encoding="UTF-8"?>
    <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="daling">
      <process id="daling" name="name_daling" isExecutable="true" activiti:candidateStarterUsers="a,b,c,d">
        <startEvent id="startevent1" name="Start"></startEvent>
        <userTask id="usertask1" name="多实例任务" activiti:assignee="${assignee}">
          <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="assigneeList" activiti:elementVariable="assignee">
            <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.25}</completionCondition>
          </multiInstanceLoopCharacteristics>
        </userTask>
        <endEvent id="endevent1" name="End"></endEvent>
        <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
        <userTask id="usertask2" name="User Task"></userTask>
        <sequenceFlow id="flow3" sourceRef="startevent1" targetRef="usertask2"></sequenceFlow>
        <sequenceFlow id="flow4" sourceRef="usertask2" targetRef="usertask1"></sequenceFlow>
      </process>
      <bpmndi:BPMNDiagram id="BPMNDiagram_daling">
        <bpmndi:BPMNPlane bpmnElement="daling" id="BPMNPlane_daling">
          <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">
            <omgdc:Bounds height="35.0" width="35.0" x="180.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">
            <omgdc:Bounds height="55.0" width="105.0" x="371.0" y="140.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">
            <omgdc:Bounds height="35.0" width="35.0" x="660.0" y="150.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">
            <omgdc:Bounds height="55.0" width="105.0" x="330.0" y="50.0"></omgdc:Bounds>
          </bpmndi:BPMNShape>
          <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">
            <omgdi:waypoint x="476.0" y="167.0"></omgdi:waypoint>
            <omgdi:waypoint x="660.0" y="167.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">
            <omgdi:waypoint x="197.0" y="150.0"></omgdi:waypoint>
            <omgdi:waypoint x="382.0" y="105.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
          <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">
            <omgdi:waypoint x="382.0" y="105.0"></omgdi:waypoint>
            <omgdi:waypoint x="423.0" y="140.0"></omgdi:waypoint>
          </bpmndi:BPMNEdge>
        </bpmndi:BPMNPlane>
      </bpmndi:BPMNDiagram>
    </definitions>

     

     

     

     

     

    动态配置如下所示:

    <userTask id="usertask1" name="多实例任务" activiti:assignee="${assignee}">

          <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="assigneeList" activiti:elementVariable="assignee">

            <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.25}</completionCondition>

          </multiInstanceLoopCharacteristics>

    </userTask>

    参数说明:

    activiti:assignee="${assignee}"

    activiti:elementVariable="assignee" 多实例任务依赖上面的配置${assignee}

    activiti:collection="assigneeList" 

    三个参数结合决定了,当前节点的处理人来自assigneeList集合,注意这里是集合信息而不是字符串,所以程序的运行时候变量的赋值,如下所示:

    String[]v={"shareniu1","shareniu2","shareniu3","shareniu4"};

    vars.put("assigneeList",  Arrays.asList(v));

    String taskId="97515";

    demo.getTaskService().complete(taskId,vars);

    ok了,测试一下,确实程序如预期的所示,大功告成。

    1.1.6. 总结

    参数的使用总结

    4.activiti:candidateUsers="shareniu1,shareniu2,shareniu3,shareniu4" 这个节点可以4个人审核。

    5.<loopCardinality>2</loopCardinality> 循环2次结束。

    6.<multiInstanceLoopCharacteristics isSequential="true"> 串行并行的配置。

    7.

     <completionCondition>${nrOfCompletedInstances/nrOfInstances >= 0.25}</completionCondition> 完成条件的配置。

    这里我们还可以得出一个结论:

    如果使用串行方式操作nrOfActiveInstances 变量始终是1,因为并行的时候才会去+1操作。

    1.1.7. 遗留点

    上面的程序已经解决了常用的问题,关于会签、加签、减签、退签、权重配置、自定义通过条件配置(条件自定义通过)

    这些问题,这个章节还没有具体的实现,关于这些问题,由于本章内容有限,我们就后续章节讲解吧。

    未完待续...

    分享牛,分享、我们是快乐的。

    展开全文
  • Mysql集群搭建(多实例、主从)

    万次阅读 多人点赞 2018-08-09 08:33:33
    1 MySQL多实例 一 、MySQL多实例介绍 1、什么是MySQL多实例 2、MySQL多实例的特点有以下几点 3、部署mysql多实例的两种方式 4、同一开发环境下安装多个数据库,必须处理以下问题 2 mysql多实例搭建 一、...

    目录

    1 MySQL多实例

    一 、MySQL多实例介绍

    1、什么是MySQL多实例

    2、MySQL多实例的特点有以下几点

    3、部署mysql多实例的两种方式

    4、同一开发环境下安装多个数据库,必须处理以下问题

    2 mysql多实例搭建

    一、mysqld_multi搭建

    1、下载免编译二进制包

    2、解压和迁移

    3、关闭iptables

    4、关闭selinux

    5、创建mysql系统用户和组

    6、创建mysql目录

    7、更改目录权限

    8、添加环境变量

    9、复制my.cnf文件到etc目录

    10、修改my.cnf(在一个文件中修改即可)

    11、 初始化数据库

    13、设置启动文件

    14、mysqld_multi进行多实例管理

    15、修改密码

    16、新建用户及授权

    17、外部软件登录数据库

    二、多配置文件搭建

    1、安装包分发

    2、卸载冗余数据库服务

    3、安装数据库

    4、启动mysql并查看状态

    5、设置开机自启

    6、设置初始密码

    7、新建用户和修改权限

    2 mysql集群搭建

    一、mysql主从集群

    1、建立siger用户并设置权限

    2、修改配置文件

    3、查看master状态

    4、配置slave

    5、启动从服务

    6、查看slave状态

    7、主从测试


    1 MySQL多实例

    一 、MySQL多实例介绍

    1、什么是MySQL多实例

    MySQL多实例就是在一台机器上开启多个不同的服务端口(如:330633073308),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。

    2、MySQL多实例的特点有以下几点

    • 有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
    • 节约服务器资源
    • 资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降;

    3、部署mysql多实例的两种方式

    第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;

    第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理;

    4、同一开发环境下安装多个数据库,必须处理以下问题

    • 配置文件安装路径不能相同
    • 数据库目录不能相同
    • 启动脚本不能同名
    • 端口不能相同
    • socket文件的生成路径不能相同

    2 mysql多实例搭建

    一、mysqld_multi搭建

    1、下载免编译二进制包

    下载地址:http://mirrors.sohu.com/mysql/MySQL-5.7/

    mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

    2、解压和迁移

    • cd /usr/local

    #将安装包拖进local文件夹下并解压

    • tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
    • mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql

    3、关闭iptables

    #临时关闭

    • service iptables stop 

    #永久关闭

    • chkconfig iptables off

    4、关闭selinux

    • vi /etc/sysconfig/selinux  

    #SELINUX修改为DISABLED,即SELINUX=DISABLED 

    5、创建mysql系统用户和组

    • groupadd -g 27 mysql
    • useradd -u 27 -g mysql mysql
    • id mysql

    6、创建mysql目录

    • mkdir -p /data/mysql/mysql_3306/data
    • mkdir -p /data/mysql/mysql_3306/log
    • mkdir -p /data/mysql/mysql_3306/tmp
    • mkdir -p /data/mysql/mysql_3307/data
    • mkdir -p /data/mysql/mysql_3307/log
    • mkdir -p /data/mysql/mysql_3307/tmp
    • mkdir -p /data/mysql/mysql_3308/data
    • mkdir -p /data/mysql/mysql_3308/log
    • mkdir -p /data/mysql/mysql_3308/tmp

    7、更改目录权限

    #任意目录下,输入

    • chown -R mysql:mysql /data/mysql/ 
    • chown -R mysql:mysql /usr/local/mysql/

    8、添加环境变量

    • echo 'export PATH=$PATH:/usr/local/mysql/bin' >>  /etc/profile 
    • source /etc/profile

    9、复制my.cnf文件到etc目录

    #将原来的my.cnf文件删除了

    • cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

    10、修改my.cnf(在一个文件中修改即可)

    • vi  /etc/my.cnf
    • [client]

      port=3306

      socket=/tmp/mysql.sock

       

      [mysqld_multi]

      mysqld = /usr/local/mysql/bin/mysqld_safe

      mysqladmin = /usr/local/mysql/bin/mysqladmin

      log = /data/mysql/mysqld_multi.log

       

      [mysqld]

      basedir = /usr/local/mysql

      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

       

      #3306数据库

      [mysqld3306]

      mysqld=mysqld

      mysqladmin=mysqladmin

      datadir=/data/mysql/mysql_3306/data

      port=3306

      server_id=3306

      socket=/tmp/mysql_3306.sock

      log-output=file

      slow_query_log = 1

      long_query_time = 1

      slow_query_log_file = /data/mysql/mysql_3306/log/slow.log

      log-error = /data/mysql/mysql_3306/log/error.log

      binlog_format = mixed

      log-bin = /data/mysql/mysql_3306/log/mysql3306_bin

       

      #3307数据库

      [mysqld3307]

      mysqld=mysqld

      mysqladmin=mysqladmin

      datadir=/data/mysql/mysql_3307/data

      port=3307

      server_id=3307

      socket=/tmp/mysql_3307.sock

      log-output=file

      slow_query_log = 1

      long_query_time = 1

      slow_query_log_file = /data/mysql/mysql_3307/log/slow.log

      log-error = /data/mysql/mysql_3307/log/error.log

      binlog_format = mixed

      log-bin = /data/mysql/mysql_3307/log/mysql3307_bin

       

      #3308数据库

      [mysqld3308]

      mysqld=mysqld

      mysqladmin=mysqladmin

      datadir=/data/mysql/mysql_3308/data

      port=3308

      server_id=3308

      socket=/tmp/mysql_3308.sock

      log-output=file

      slow_query_log = 1

      long_query_time = 1

      slow_query_log_file = /data/mysql/mysql_3308/log/slow.log

      log-error = /data/mysql/mysql_3308/log/error.log

      binlog_format = mixed

      log-bin = /data/mysql/mysql_3308/log/mysql3308_bin

    11 初始化数据库

     #初始化3306数据库 

    • /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3306/data --defaults-file=/etc/my.cnf  

     #初始化3307数据库 

    • /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3307/data --defaults-file=/etc/my.cnf

     #初始化3308数据库 

    • /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3308/data --defaults-file=/etc/my.cnf

    12、查看数据库是否初始化成功

    查看330633073308数据库

    • cd /data/mysql/mysql_3306/data/
    • cd /data/mysql/mysql_3307/data/
    • cd /data/mysql/mysql_3308/data/

    13设置启动文件

    • cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

    14mysqld_multi进行多实例管理

    启动全部实例:/usr/local/mysql/bin/mysqld_multi start

    查看全部实例状态:/usr/local/mysql/bin/mysqld_multi report 

    启动单个实例:/usr/local/mysql/bin/mysqld_multi start 3306 

    停止单个实例:/usr/local/mysql/bin/mysqld_multi stop 3306 

    查看单个实例状态:/usr/local/mysql/bin/mysqld_multi report 3306 

    #启动全部实例

    • /usr/local/mysql/bin/mysqld_multi start
    • /usr/local/mysql/bin/mysqld_multi report

    # 查看启动进程

    • ps -aux | grep mysql

    #进入tmp目录,查看sock文件

    • cd /tmp

    15修改密码

    mysqlroot用户初始密码是空,所以需要登录mysql进行修改密码,下面以3306为例:

      • mysql -S /tmp/mysql_3306.sock
      • set password for root@'localhost'=password('xxxxxx');
      • flush privileges;

    #修改3307数据库密码

    • mysql -S /tmp/mysql_3307.sock
    • set password for root@'localhost'=password('xxxxxx');
    • flush privileges;

    #修改3308数据库密码

    • mysql -S /tmp/mysql_3307.sock
    • set password for root@'localhost'=password('xxxxxx');
    • flush privileges;

    16新建用户及授权

    一般新建数据库都需要新增一个用户,用于程序连接,这类用户只需要insertupdatedeleteselect权限。这里赋予所有权限,以3306为例,33073308相同。

    #新增一个用户,并授权如下: 

    • grant ALL PRIVILEGES on *.* to admin@'%' identified by 'xxxxxx'; 
    • flush privileges

    17、外部软件登录数据库

    图1

    图2

    二、多配置文件搭建

    1、安装包分发

    140搭建的有mysql数据库

    #将数据库安装包分发到其他两台机器

    2、卸载冗余数据库服务

    #查找之前安装的数据库服务,若有,怎卸载数据库服务

    • rpm -qa|grep -i mysql
    • rpm -qa|grep -i MariaDB
    • rpm -ev mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
    • rpm -ev mysql-community-test-5.7.19-1.el7.x86_64 mysql-community-devel-5.7.19-1.el7.x86_64 mysql-community-libs-5.7.19-1.el7.x86_64 mysql-community-embedded-compat-5.7.19-1.el7.x86_64 mysql-community-embedded-devel-5.7.19-1.el7.x86_64 mysql-community-server-5.7.19-1.el7.x86_64 mysql-community-minimal-debuginfo-5.7.19-1.el7.x86_64 mysql-community-common-5.7.19-1.el7.x86_64 mysql-community-libs-compat-5.7.19-1.el7.x86_64 mysql-community-embedded-5.7.19-1.el7.x86_64 mysql-community-client-5.7.19-1.el7.x86_64 mysql-community-server-minimal-5.7.19-1.el7.x86_64 --nodeps

    3、安装数据库

    在141上安装数据库

    #安装mysql的环境

    • yum -y install gcc gcc-c++ gdb cmake ncurses-devel bison bison-devel 

    #解压mysql安装包

    • tar -zxvf MySQL-5.7.19-1.el7.x86_64_64.rpm-bundle.tar

    #安装mysql服务

    • sudo rpm -ivh --force mysql-community-client-5.7.19-1.el7.x86_64.rpm mysql-community-common-5.7.19-1.el7.x86_64.rpm mysql-community-devel-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.19-1.el7.x86_64.rpm mysql-community-libs-5.7.19-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.19-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.19-1.el7.x86_64.rpm mysql-community-server-5.7.19-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.19-1.el7.x86_64.rpm mysql-community-test-5.7.19-1.el7.x86_64.rpm  --nodeps

    #查看安装的mysql服务

    • rpm -qa|grep -i mysql

    142上安装数据库:与上面同样的操作

    4、启动mysql并查看状态

    #启动

    • service mysqld start

    #查看数据库运行状态

    • service mysqld status

    #查看MySQL的进程

    • ps -aux|grep mysql

    5、设置开机自启

    • systemctl enable mysqld.service

    6、设置初始密码

    #查看随机生成的mysql密码

    • grep "password" /var/log/mysqld.log

    #登陆数据库客户端

    • mysql -u root -p

    注意:用随机生成的密码

    #设置新密码

    • set password = password('xxxxxx');

    7、新建用户和修改权限

    #修改root用户的权限

    • grant ALL PRIVILEGES on *.* to root@'%' identified by 'xxxxxx';

    #创建amdin用户,并赋予限

    • CREATE USER 'admin'@'%' IDENTIFIED BY 'xxxxxx';  
    • grant ALL PRIVILEGES on *.* to admin@'localhost' identified by 'xxxxxx';
    • FLUSH PRIVILEGES;

    #查看用户的权限

    • select host,user from mysql.user;

    142上设置数据库:与上面同样的操作

     

    2 mysql集群搭建

    一、mysql主从集群

    1、建立siger用户并设置权限

    登陆140的mysql数据库

    • mysql -u root -p
    • CREATE USER 'siger'@'%'IDENTIFIED BY 'xxxxxx';
    • GRANT ALL PRIVILEGES ON *.* TO 'siger'@'%';
    • grant ALL PRIVILEGES on *.* to siger@'localhost' identified by 'xxxxxx';
    • FLUSH PRIVILEGES;
    • select host,user from mysql.user;

    2、修改配置文件

    修改三台数据库的配置文件

    #140数据库的配置文件

    • vi /etc/my.cnf

    [mysqld]

    log-bin=mysql-bin

    server-id=140

    #141数据库的配置文件

    • vi /etc/my.cnf

    [mysqld]

    log-bin=mysql-bin

    server-id=141

    #142数据库的配置文件

    • vi /etc/my.cnf

    [mysqld]

    log-bin=mysql-bin

    server-id=142

    3、查看master状态

    • SHOW MASTER STATUS;

    4、配置slave

    #登陆在140141据库,在slave上链接master

    • change master to master_host='172.8.10.140',master_user='siger',master_password='xxxxxx',master_log_file='mysql-bin.000004',master_log_pos=77461339;

    #参数配置

    master_host:主节点mysql的IP地址

    master_user:主节点mysql登陆用户的用户名

    master_password:主节点mysql登陆用户的密码

    master_log_file:主节点mysql的日志文件指定

    master_log_pos:主节点mysql的Ppsition的ID

    5、启动从服务

    #在141数据库上

    • start slave;

    #在142数据库上

    • start slave;

    6、查看slave状态

    #在3307数据库上

    • show slave status\G

    #在3308数据库上

    • show slave status\G

    7、主从测试

    #master建立数据库siger

    • create database siger;
    • use siger;
    • create table slave_test(id int(6),name varchar(10))
    • insert into slave_test values(000001,'weiyang');
    • FLUSH PRIVILEGES;
    • show tables;

    #在141、142从节点上查看

    mysql集群主备、负载后面会继续更新

    展开全文
  • Activiti6多实例

    千次阅读 2019-06-26 17:57:15
    多实例可以配置在各种类型的任务节点、子流程、回调活动节点上。下图红色方框是涉及多实例需要配置的字段: 多实例包含的默认变量,可以通过execution.getVariable(x)方法获取 nrOfInstances:创建的实例总数 ...
  • 定时任务调度服务(含多实例锁、多实例间的任务执行计划的动态同步等)
  • Tomcat多实例部署

    万次阅读 2012-06-30 12:06:44
    Tomcat多实例部署  前言 一般我们使用tomcat时,如果是多实例的情况都会拷贝多个tomcat,但实际上tomcat还可以建立类似于weblogic的domain,以实现多实例部署。 Weblogic多实例部署回顾 讲tomcat多实例部署前我们先...
  • activiti多实例任务设置候选人组 需求场景:任务节点为多实例,该节点有多个分支,每个分支必须同时通过才算任务结束,每个分支可以有多个人审批,分之中一个人审批通过就算给分支通过。但是又不想用任务候选组的...
  • linux部署Mysql多实例

    千次阅读 2019-01-26 16:16:24
    mysql多实例的概述 多实例就是在一台服务器上开启多个不同的mysql服务端口,运行多个mysql服务进程。这些进程通过不同的socket监听不同的服务端口,以此来提供不同的服务。 多个实例共用一套安装程序,但有各自的...
  • Activit多实例任务

    千次阅读 2017-03-26 14:47:22
    多实例任务:顺序和并行 顺序:按照集合设置的顺序执行 并行:按照集合设置的同时到达任务人 实例的数量就是任务执行人的数量,如果不是用户任务那么就要自己设置实例的数量 即:一个任务节点多人(顺序或并行)...
  • MySQL多实例配置

    千次阅读 2016-04-10 01:11:24
    今天闲着没事又把mysql多实例知识回顾了一下,虽然以前配置过,这次还是遇到很多坑… 安装mysql数据库,见前面博文 创建mysql多实例的数据文件目录 本次是/data目录作为mysql多实例总的根目录。 /data ————...
  • Redis 多实例创建运行

    千次阅读 2018-06-27 00:27:24
    二.redis 多实例运行 redis是单进程单线程来运行的,可以在一台系统上以多实例运行。因为redis在数据文件大于20~30G的时候,效率会降低。所以,多实例来运行会是一个很好的方式。 redis运行多实例,需要修改多个...
  • tomcat单机多实例

    千次阅读 2019-02-26 21:51:45
      首先要回答一个问题,为什么要用单机多实例? 在不宕机的情况下,webapps里面存在多个项目,可能由于其中一个项目过度使用内存或者其他不确定的因素使得tomcat挂了,那么同一tomcat下的项目也会一同挂了;而...
  • MySQL多实例安装部署

    千次阅读 2018-07-11 10:15:29
    MySQL多实例安装部署 标签(空格分隔): mysql 一、mysql多实例的原理 mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程。这些服务进程通过...
  • MySQL多实例管理(mysqld_multi)

    千次阅读 2019-08-28 15:12:21
    MySQL多实例管理(mysqld_multi) 官方文档: https://dev.mysql.com/doc/refman/5.7/en/multiple-servers.htmlhttps://dev.mysql.com/doc/refman/5.5/en/mysqld-multi.html 1.MySQL多实例介绍 1.1.什么是MySQL...
  • mysql多实例(多个配置文件方式)

    千次阅读 2015-08-13 12:22:20
    CleverCode最近在研究mysql的多实例,发现有两种方式: 第一种是使用多个配置文件启动不同的进程来实现多实例。这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便。 第二种是通过官方自带的mysqld_multi。...
  • ES多实例配置

    千次阅读 2017-03-01 14:41:08
    配置变更http.port这个配置是elasticsearch对外提供服务的http端口配置,默认情况下ES会取用9200~9299之间的端口,如果9200被占用就会自动使用9201,在单机多实例的配置中这个配置实际是不需要修改的。 但是为了更...
  • Flowable中的多实例事件

    千次阅读 2017-11-17 09:24:44
    在flowable6.3以后的版本中,支持了MULTI_INSTANCE_ACTIVITY_COMPLETED_WITH_CONDITION事件,这个事件顾名思义就是在多实例节点完成的时候,flowable引擎去发布这个完成事件信号。该事件同其他的事件一样,定义在...
  • cmake,硬编码到程序当中在命令行上初始化配置:初始化配置文件my.cnf(重点)关于配置文件的读取顺序mysql的初始化配置文件的使用:如何熟悉写一个my.cnf配置文件MySQL多实例配置多实例是什么?为什么要使用多实例?...
  • Webuploader 多实例传参教程

    千次阅读 2017-10-18 10:42:21
    Webuploader 多实例传参教程Webuploader 是百度开发的一款用于图片和文件上传的前端控件,在所有的前端上传控件中算是比较好的,而且文档维护的也比较全面,基础的东西大家移步官网就可以。我们主要介绍两点:1.在一...
  • tomcat多实例部署实践

    千次阅读 2016-12-01 18:52:56
    因为前几天的一个小型上线项目被tomcat的多实例给坑了,所以打算看看tomcat多实例相关内容,并进行了实践配置。 至于单个tomcat多实例应用部署与多个tomcat多应用部署差别与单个tomcat多实例的原理与应用可以自己找...
  • Redis-多端口多实例运行

    千次阅读 2018-02-22 22:26:33
    Redis是默认安装在/etc/redis目录之...现在我们需要将Redis设置多端口多实例运行,并且开机自动运行,需要以下几个简单的步骤: 进入/etc/redis目录,拷贝Redis的配置文件 cp redis.conf redis_6380.conf 修...
  • 配置JBOSS多实例

    千次阅读 热门讨论 2014-11-12 21:46:40
    在使用Jboss服务器时,很多情况我们需要配置多个实例,下面为大家介绍JBoss里如何配置多实例,以Jboss5.1为例介绍。 1.复制${JBOSS_HOME}\server\default文件夹,粘贴到该目录:${JBOSS_HOME}\server\ 2.重命名...
  • spring对象的单实例和多实例 懒加载

    千次阅读 2017-04-26 12:20:25
    懒加载: spring默认是不启用 懒加载的,就是说spring在一加载配置...单实例和多实例: spring容器创建对象默认是单例的,无论调用几次getBean()都是在调用一个实例, 当将属性设置为scope="prototype"是,spring
  • Flowable—多实例任务:会签

    千次阅读 2019-12-31 11:07:31
    多实例任务 会签 什么是会签? 举个例子:比如我们有一个任务 可能需要多人审批,审批通过的条件可能比较多样,比如五个人审批。3个人审批过了就算过了,再或者有一个人权限比较高,拥有一票否决权。 即是其余所有人...
  • mysql 多实例案例实战

    千次阅读 2015-10-21 15:27:33
    MySQL多实例案例其实Mysql多实例就是在一个MySQL服务上面启动三个实例,相当于三个分离开来的数据库,至于为什么要做这个,你也可以选择分别安装三个MySQL,只是过于麻烦,多实例中只需要一个配置档my.cnf,并且通过...
  • mysql单实例和多实例下跨主机备份

    千次阅读 2017-07-10 20:46:50
    单实例: mysqldump -h192.168.48.131 -uroot -proot --opt dbname1 | mysql -h192.168.48.1 -uroot -proot -C dbname2;...多实例:mysqldump -h192.168.48.131 -S /var/lib/mysql1/mysql.sock -ur
  • tomcat单机多实例部署

    千次阅读 2018-09-26 18:31:25
    聊聊 Tomcat 的单机多实例 Tomcat 的基本组成 了解一个事物的本质是现在就用它。不废话,直接先说一下 Tomcat 的安装和使用, 安装好之后,进入安装目录看一眼结构: 简单介绍一下各个文件夹及文件: bin:...
  • ubuntu 下 MySQL 多实例配置

    千次阅读 2017-02-04 20:48:39
    ubuntu 下 MySQL 多实例配置标签:ubuntu MySQL 多实例 项目需求测试MySQL的并发性能,故而需要启动多个实例,即在一台机器上启动多个MySQL服务。只是一个简单需求,也折腾了好几天,本文做一个记录,也希望能帮助更...
  • zookeeper单机多实例部署

    千次阅读 2018-04-22 11:07:42
    介绍zookeeper单机多实例部署,更多适合于实验性质;ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,025
精华内容 80,010
关键字:

多实例