使用ROS创建ECS,安装MySQL并生成用户

无轩 2019-10-16

mysql ECS 数据库 系统盘 DB aliyun BY string ROS type ulimit

在杭州创建自建数据库网络和服务器环境,部署一台ECS,安装MySQL并创建root用户,三个普通用户并分配权限,创建数据库插入测试数据。
ros模板

{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": "部署自建数据库网络和服务器环境",
  "Metadata": {
    "ALIYUN::ROS::Interface": {
      "ParameterGroups": [
        {
          "Parameters": [
            "CidrBlock",
            "VpcName",
            "Vsw_ZoneId",
            "VSWName"
          ],
          "Label": {
            "default": "网络"
          }
        },
        {
          "Parameters": [
            "ECSZoneId",
            "InstanceType",
            "LoginPassword",
            "ImageId",
            "SystemDiskCategory",
            "SystemDiskSize",
            "PublicIP",
            "InternetChargeType",
            "InternetMaxBandwidthIn",
            "HostName",
            "InstanceName"
          ],
          "Label": {
            "default": "ECS"
          }
        },
        {
          "Parameters": [
            "MysqlPassword",
            "DataBase1",
            "User1",
            "Password1",
            "User2",
            "Password2",
            "User3",
            "Password3",
            "DBTable"
          ],
          "Label": {
            "default": "MySQL"
          }
        }
      ],
      "TemplateTags": [
        "VPC_ECS"
      ]
    }
  },
  "Parameters": {
    "User2": {
      "Type": "String",
      "Description": "创建MySQL普通用户",
      "Label": "用户2",
      "Default": "doman"
    },
    "DBTable": {
      "Type": "String",
      "Description": "数据库内创建表",
      "Label": "表名",
      "Default": "demo_dplus_buyer"
    },
    "SystemDiskSize": {
      "Type": "Number",
      "Description": "系统盘大小,40 - 500, 单位:GB",
      "Label": "系统盘",
      "Default": 40
    },
    "PublicIP": {
      "Type": "Boolean",
      "Description": "是否分配公网IP",
      "AllowedValues": [
        true,
        false
      ],
      "Label": "分配公网IP",
      "Default": true
    },
    "Vsw_ZoneId": {
      "Type": "String",
      "Description": "可用区是指在同一地域内,电力和网络互相独立的物理区域。在同一专有网络内可用区与可用区之间内网互通,可用区之间能做到故障隔离。。",
      "AllowedValues": [
        "cn-hangzhou-b",
        "cn-hangzhou-d",
        "cn-hangzhou-e",
        "cn-hangzhou-f",
        "cn-hangzhou-g",
        "cn-hangzhou-h",
        "cn-hangzhou-i"
      ],
      "Label": "可用区",
      "Default": "cn-hangzhou-b"
    },
    "User1": {
      "Type": "String",
      "Description": "创建MySQL普通用户",
      "Label": "用户1",
      "Default": "selman"
    },
    "Password3": {
      "Type": "String",
      "Description": "普通用户密码",
      "Label": "用户3密码",
      "MinLength": 6,
      "MaxLength": 30,
      "Default": "yourpassword"
    },
    "Password2": {
      "Type": "String",
      "Description": "普通用户密码",
      "Label": "用户2密码",
      "MinLength": 6,
      "MaxLength": 30,
      "Default": "yourpassword"
    },
    "Password1": {
      "Type": "String",
      "Description": "普通用户密码",
      "Label": "用户1密码",
      "MinLength": 6,
      "MaxLength": 30,
      "Default": "yourpassword"
    },
    "CidrBlock": {
      "Type": "String",
      "Description": "建议您使用RFC私网地址10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 作为专有网络的网段。如果特殊情况需要使用公网网段作为专有网络网段,请提交工单申请。",
      "Label": "IPv4网段",
      "Default": "192.168.0.0/16"
    },
    "User3": {
      "Type": "String",
      "Description": "创建MySQL普通用户",
      "Label": "用户3",
      "Default": "alterman"
    },
    "VSWName": {
      "Type": "String",
      "Description": "长度为2-128个字符,以大小字母或中文开头,可包含数字,_或-。",
      "Label": "VSwitch名称",
      "Default": "vsw_local"
    },
    "InternetChargeType": {
      "Type": "String",
      "Description": "PayByBandwidth(按固定带宽计费)、PayByTraffic(按流量计费)。",
      "AllowedValues": [
        "PayByBandwidth",
        "PayByTraffic"
      ],
      "Label": "公网带宽计费",
      "Default": "PayByTraffic"
    },
    "SystemDiskCategory": {
      "Type": "String",
      "Description": "指定系统盘类型。",
      "AllowedValues": [
        "cloud",
        "cloud_efficiency",
        "cloud_ssd",
        "ephemeral_ssd"
      ],
      "Label": "系统盘类型",
      "Default": "cloud_efficiency"
    },
    "InstanceName": {
      "Type": "String",
      "Description": "最长128个字符,可包含英文、中文、数字、下划线(_)、点(.)、连字符(-)。",
      "Label": "实例名称",
      "Default": "dbserver"
    },
    "InternetMaxBandwidthIn": {
      "Type": "Number",
      "Description": "取值范围:[1, 100],单位:Mbps。",
      "Label": "公网最大入网带宽",
      "Default": 5
    },
    "ECSZoneId": {
      "Type": "String",
      "Description": "可用区是指在同一地域内,电力和网络互相独立的物理区域。在同一专有网络内可用区与可用区之间内网互通,可用区之间能做到故障隔离。",
      "AllowedValues": [
        "cn-hangzhou-b",
        "cn-hangzhou-d",
        "cn-hangzhou-e",
        "cn-hangzhou-f",
        "cn-hangzhou-g",
        "cn-hangzhou-h",
        "cn-hangzhou-i"
      ],
      "Label": "可用区",
      "Default": "cn-hangzhou-b"
    },
    "MysqlPassword": {
      "Type": "String",
      "Description": "MySQLroot用户密码",
      "Label": "root用户密码",
      "MinLength": 6,
      "MaxLength": 30,
      "Default": "Test123"
    },
    "ImageId": {
      "Type": "String",
      "Description": "镜像ID, 表示要启动一个ECS实例的映像资源, <a href='#/product/cn-hangzhou/list/imageList' target='_blank'>查看镜像资源</a>",
      "Label": "ECS镜像ID",
      "Default": "centos_7"
    },
    "VpcName": {
      "Type": "String",
      "Description": "长度为2-128个字符,以大小字母或中文开头,可包含数字,_或-。",
      "Label": "Vpc名称",
      "Default": "VPC_LOCAL"
    },
    "InstanceType": {
      "Type": "String",
      "Description": "ECS实例类型, <a href='#/product/cn-hangzhou/list/typeList' target='_blank'>查看实例类型</a>",
      "AllowedValues": [
        "ecs.e3.medium",
        "ecs.g5.xlarge",
        "ecs.g6.xlarge",
        "ecs.t5-c1m4.xlarge",
        "ecs.sn2ne.xlarge"
      ],
      "Label": "ECS实例类型",
      "Default": "ecs.e3.medium"
    },
    "HostName": {
      "Type": "String",
      "Description": "最少 2 个字符,点(.)和连字符(-)不能作为 hostname 的首尾字符,且不能连续使用。",
      "Label": "主机名",
      "Default": "dbserver"
    },
    "DataBase1": {
      "Type": "String",
      "Description": "创建一个指定数据库",
      "Label": "数据库",
      "Default": "demodb"
    },
    "LoginPassword": {
      "NoEcho": true,
      "Type": "String",
      "Description": "ECS登录密码",
      "Label": "ECS登录密码",
      "Confirm": true,
      "MinLength": 6,
      "MaxLength": 30
    }
  },
  "Resources": {
    "WaitCondition": {
      "Type": "ALIYUN::ROS::WaitCondition",
      "Properties": {
        "Timeout": 600,
        "Count": 1,
        "Handle": {
          "Ref": "WaitConditionHandle"
        }
      }
    },
    "ECS": {
      "Type": "ALIYUN::ECS::Instance",
      "Properties": {
        "IoOptimized": "optimized",
        "PrivateIpAddress": "192.168.0.1",
        "ZoneId": {
          "Ref": "ECSZoneId"
        },
        "UserData": {
          "Fn::Replace": [
            {
              "ros-notify": {
                "Fn::GetAtt": [
                  "WaitConditionHandle",
                  "CurlCli"
                ]
              }
            },
            {
              "Fn::Join": [
                "",
                [
                  "#!/bin/sh \n",
                  "rootpwd=",
                  {
                    "Ref": "MysqlPassword"
                  },
                  " \n",
                  "data_base1=",
                  {
                    "Ref": "DataBase1"
                  },
                  " \n",
                  "user1=",
                  {
                    "Ref": "User1"
                  },
                  " \n",
                  "pwd1=",
                  {
                    "Ref": "Password1"
                  },
                  " \n",
                  "user2=",
                  {
                    "Ref": "User2"
                  },
                  " \n",
                  "pwd2=",
                  {
                    "Ref": "Password2"
                  },
                  " \n",
                  "user3=",
                  {
                    "Ref": "User3"
                  },
                  " \n",
                  "pwd3=",
                  {
                    "Ref": "Password3"
                  },
                  " \n",
                  "db_table=",
                  {
                    "Ref": "DBTable"
                  },
                  " \n",
                  "cd ~ \n",
                  "wget http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm \n",
                  "rpm -ivh mysql-community-release-el6-5.noarch.rpm \n",
                  "yum repolist all | grep mysql \n",
                  "yum install mysql-community-server -y \n",
                  "# 生成MySQL root用户,设置密码 \n",
                  "echo \\#\\!/bin/bash > dbroot.sh \n",
                  "echo MYSQL_PASSWD=\\\"$rootpwd\\\" >> dbroot.sh \n",
                  "echo service mysqld start >> dbroot.sh \n",
                  "echo yum install expect -y >> dbroot.sh \n",
                  "echo \"echo '#!/usr/bin/expect\" >> dbroot.sh \n",
                  "echo set timeout 60 >> dbroot.sh \n",
                  "echo 'set password [lindex $argv 0]' >> dbroot.sh \n",
                  "echo spawn mysql_secure_installation >> dbroot.sh \n",
                  "echo expect { >> dbroot.sh \n",
                  "echo \\\"enter for none\\\" { send \\\"\\\\r\\\"\\; exp_continue} >> dbroot.sh \n",
                  "echo \\\"Y/n\\\" { send \\\"Y\\\\r\\\" \\; exp_continue} >> dbroot.sh \n",
                  "echo '\"password\" { send \"$password\\r\"; exp_continue}' >> dbroot.sh \n",
                  "echo \\\"Cleaning up\\\" { send \\\"\\\\r\\\"} >> dbroot.sh \n",
                  "echo } >> dbroot.sh \n",
                  "echo \"interact ' > mysql_secure_installation.exp\" >> dbroot.sh \n",
                  "echo chmod +x mysql_secure_installation.exp >> dbroot.sh \n",
                  "echo './mysql_secure_installation.exp $MYSQL_PASSWD' >> dbroot.sh \n",
                  "chmod +x dbroot.sh \n",
                  "./dbroot.sh \n",
                  "# 数据库配置文件初始化命令 \n",
                  "cp /etc/my.cnf /etc/my.cnf.bak \n",
                  "echo '[mysqld]' > /etc/my.cnf \n",
                  "echo 'server_id=10001' >> /etc/my.cnf \n",
                  "echo 'innodb_buffer_pool_size         = 8G' >> /etc/my.cnf \n",
                  "echo 'port  = 3306' >> /etc/my.cnf \n",
                  "echo 'max_connections         = 1000 ' >> /etc/my.cnf \n",
                  "echo 'max_user_connections    = 1000 ' >> /etc/my.cnf \n",
                  "echo 'table_open_cache            = 10240 ' >> /etc/my.cnf \n",
                  "echo 'table_definition_cache      = 2048  ' >> /etc/my.cnf \n",
                  "echo 'open_files_limit = 65535 ' >> /etc/my.cnf \n",
                  "echo 'innodb_open_files               = 65535' >> /etc/my.cnf \n",
                  "echo 'innodb_log_file_size            = 100M ' >> /etc/my.cnf \n",
                  "echo 'innodb_log_files_in_group       = 2 ' >> /etc/my.cnf \n",
                  "echo 'lower_case_table_names  = 1' >> /etc/my.cnf \n",
                  "echo 'collation_server        = utf8_bin' >> /etc/my.cnf \n",
                  "echo 'character_set_server = utf8' >> /etc/my.cnf \n",
                  "echo 'skip_name_resolve' >> /etc/my.cnf \n",
                  "echo 'skip-external-locking' >> /etc/my.cnf \n",
                  "echo 'explicit_defaults_for_timestamp ' >> /etc/my.cnf \n",
                  "echo 'back_log        = 1024' >> /etc/my.cnf \n",
                  "echo 'thread_cache_size           = 512 ' >> /etc/my.cnf \n",
                  "echo 'max_connect_errors      = 2000 ' >> /etc/my.cnf \n",
                  "echo 'table_open_cache_instances  = 16' >> /etc/my.cnf \n",
                  "echo 'binlog_cache_size           = 512K' >> /etc/my.cnf \n",
                  "echo 'bulk_insert_buffer_size     = 64M' >> /etc/my.cnf \n",
                  "echo 'ft_min_word_len             = 4' >> /etc/my.cnf \n",
                  "echo 'key_buffer_size             = 32M' >> /etc/my.cnf \n",
                  "echo 'max_allowed_packet          = 1024M' >> /etc/my.cnf \n",
                  "echo 'max_heap_table_size         = 32M' >> /etc/my.cnf \n",
                  "echo 'tmp_table_size  = 32M' >> /etc/my.cnf \n",
                  "echo 'myisam_max_sort_file_size   = 10G' >> /etc/my.cnf \n",
                  "echo 'myisam_repair_threads       = 1' >> /etc/my.cnf \n",
                  "echo 'myisam_sort_buffer_size     = 24M' >> /etc/my.cnf \n",
                  "echo 'query_cache_limit           = 1M' >> /etc/my.cnf \n",
                  "echo 'query_cache_size            = 0' >> /etc/my.cnf \n",
                  "echo 'sort_buffer_size            = 4M' >> /etc/my.cnf \n",
                  "echo 'join_buffer_size            = 6M' >> /etc/my.cnf \n",
                  "echo 'read_buffer_size            = 2M' >> /etc/my.cnf \n",
                  "echo 'read_rnd_buffer_size        = 3M' >> /etc/my.cnf \n",
                  "echo 'thread_stack                = 192K' >> /etc/my.cnf \n",
                  "echo '# log' >> /etc/my.cnf \n",
                  "echo 'general_log                 = off ' >> /etc/my.cnf \n",
                  "echo 'log_bin=on' >> /etc/my.cnf \n",
                  "echo 'binlog_format=ROW' >> /etc/my.cnf \n",
                  "echo '#' >> /etc/my.cnf \n",
                  "echo 'datadir=/var/lib/mysql' >> /etc/my.cnf \n",
                  "echo 'socket=/var/lib/mysql/mysql.sock' >> /etc/my.cnf \n",
                  "echo '' >> /etc/my.cnf \n",
                  "echo 'symbolic-links=0' >> /etc/my.cnf \n",
                  "echo '' >> /etc/my.cnf \n",
                  "echo 'sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES' >> /etc/my.cnf \n",
                  "echo '' >> /etc/my.cnf \n",
                  "echo '[mysql_safe]' >> /etc/my.cnf \n",
                  "echo 'log-error=/var/log/mysqld.log' >> /etc/my.cnf \n",
                  "echo 'pid-file=/var/run/mysqld/mysqld.pid' >> /etc/my.cnf \n",
                  "service mysqld restart \n",
                  "# 操作系统层面数据库优化 \n",
                  "echo 'ulimit -u 65535' >> /etc/profile \n",
                  "echo 'ulimit -n 65535' >> /etc/profile \n",
                  "echo 'ulimit -d unlimited' >> /etc/profile \n",
                  "echo 'ulimit -m unlimited' >> /etc/profile \n",
                  "echo 'ulimit -s unlimited' >> /etc/profile \n",
                  "echo 'ulimit -t unlimited' >> /etc/profile \n",
                  "echo 'ulimit -v unlimited' >> /etc/profile \n",
                  "source /etc/profile \n",
                  "# 创建数据库、表,插入数据 \n",
                  "echo \\#\\!/bin/bash > db.sh \n",
                  "echo mysql -uroot -p\"$rootpwd\" \\<\\<EOF >> db.sh \n",
                  "echo CREATE DATABASE IF NOT EXISTS \"$data_base1\" DEFAULT CHARSET utf8 COLLATE utf8_general_ci\\; >> db.sh \n",
                  "echo create user \"$user1\" identified by \\\"$pwd1\\\"\\; >> db.sh \n",
                  "echo grant select on $data_base1.* to \\\"$user1\\\"@\\\"%\\\" identified by \\\"$pwd1\\\"\\; >> db.sh \n",
                  "echo create user \"$user2\" identified by \\\"$pwd2\\\"\\; >> db.sh \n",
                  "echo grant select,update,insert,delete on \"$data_base1\".* to \"$user2\"@\\\"%\\\" identified by \\\"$pwd2\\\"\\; >> db.sh \n",
                  "echo create user \"$user3\" identified by \\\"$pwd3\\\"\\; >> db.sh \n",
                  "echo grant create,drop,index,alter on \"$data_base1\".* to \\\"$user3\\\"@\\\"%\\\" identified by \\\"$pwd3\\\"\\; >> db.sh \n",
                  "echo flush privileges\\; >> db.sh \n",
                  "echo use \"$data_base1\"\\; >> db.sh \n",
                  "echo DROP TABLE IF EXISTS demo_data\\; >> db.sh \n",
                  "echo CREATE TABLE \"$db_table\" \\( >> db.sh \n",
                  "echo   buyer_id varchar\\(32\\) DEFAULT NULL , >> db.sh \n",
                  "echo   buyer_prov varchar\\(32\\) DEFAULT NULL , >> db.sh \n",
                  "echo   gender varchar\\(32\\) DEFAULT NULL , >> db.sh \n",
                  "echo   age_range varchar\\(32\\) DEFAULT NULL , >> db.sh \n",
                  "echo   zodiac varchar\\(32\\) DEFAULT NULL  >> db.sh \n",
                  "echo \\) ENGINE=InnoDB DEFAULT CHARSET=utf8\\; >> db.sh \n",
                  "echo insert into \"$db_table\"\\(\"buyer_id\",\"buyer_prov\",\"gender\",\"age_range\",\"zodiac\"\\) values >> db.sh \n",
                  "echo \\(\\\"111111111\\\",\\\"asdasd\\\",\\\"M\\\",\\\"20-30\\\",\\\"by\\\"\\), >> db.sh \n",
                  "echo \\(\\\"22222222\\\",\\\"zxczxc\\\",\\\"M\\\",\\\"20-30\\\",\\\"by\\\"\\)\\; >> db.sh \n",
                  "echo EOF >> db.sh \n",
                  "chmod +x db.sh \n",
                  "./db.sh \n",
                  "ros-notify -d \"{\\\"Data\\\" : \\\"SUCCESS\\\", \\\"Status\\\" : \\\"SUCCESS\\\"}\" \n"
                ]
              ]
            }
          ]
        },
        "SystemDiskSize": {
          "Ref": "SystemDiskSize"
        },
        "VSwitchId": {
          "Ref": "VSW"
        },
        "SecurityGroupId": {
          "Ref": "SG"
        },
        "SystemDiskCategory": {
          "Ref": "SystemDiskCategory"
        },
        "InternetChargeType": {
          "Ref": "InternetChargeType"
        },
        "InstanceName": {
          "Ref": "InstanceName"
        },
        "VpcId": {
          "Ref": "VPC"
        },
        "InternetMaxBandwidthIn": {
          "Ref": "InternetMaxBandwidthIn"
        },
        "ImageId": {
          "Ref": "ImageId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        },
        "AllocatePublicIP": {
          "Ref": "PublicIP"
        },
        "HostName": {
          "Ref": "HostName"
        },
        "Password": {
          "Ref": "LoginPassword"
        }
      }
    },
    "SG": {
      "Type": "ALIYUN::ECS::SecurityGroup",
      "Properties": {
        "VpcId": {
          "Ref": "VPC"
        },
        "SecurityGroupName": "mysg",
        "SecurityGroupIngress": [
          {
            "PortRange": "-1/-1",
            "Priority": 1,
            "SourceCidrIp": "0.0.0.0/0",
            "IpProtocol": "all",
            "NicType": "internet"
          }
        ],
        "SecurityGroupEgress": [
          {
            "PortRange": "-1/-1",
            "Priority": 1,
            "IpProtocol": "all",
            "DestCidrIp": "0.0.0.0/0",
            "NicType": "intranet"
          }
        ]
      }
    },
    "WaitConditionHandle": {
      "Type": "ALIYUN::ROS::WaitConditionHandle"
    },
    "VPC": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "CidrBlock": {
          "Ref": "CidrBlock"
        },
        "VpcName": {
          "Ref": "VpcName"
        }
      }
    },
    "VSW": {
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "VpcId": {
          "Ref": "VPC"
        },
        "ZoneId": {
          "Ref": "Vsw_ZoneId"
        },
        "CidrBlock": {
          "Ref": "CidrBlock"
        },
        "VSwitchName": {
          "Ref": "VSWName"
        }
      }
    }
  },
  "Outputs": {
    "ECS实例ID": {
      "Value": {
        "Fn::GetAtt": [
          "ECS",
          "InstanceId"
        ]
      }
    },
    "公网IP": {
      "Value": {
        "Fn::GetAtt": [
          "ECS",
          "PublicIp"
        ]
      }
    }
  }
}

参考阿里云解决方案详情

登录 后评论
下一篇
云栖号资讯小编
16329人浏览
2020-07-13
相关推荐
阿里云一键部署 Docker Datacenter
7908人浏览
2017-01-12 10:26:43
资源编排(ROS)博文索引
10451人浏览
2016-07-08 17:34:54
ROS 中使用 Chef 部署应用
5213人浏览
2017-02-28 10:13:40
使用ROS创建一组ECS
6799人浏览
2019-10-16 17:27:24
阿里云一键部署 Docker Datacenter
12552人浏览
2017-01-13 14:00:22
userdata for ECS使用场景介绍
6667人浏览
2017-03-09 19:30:42
0
0
0
855