zoukankan      html  css  js  c++  java
  • 单机安装MySQL多实例

    很多时候受限于资源限制,需要在单机上安装多个MySQL实例。
    本文基于MySQL 5.7.27,介绍如何在单机环境下安装多个MySQL实例。
    操作系统是Cent OS 6.8。
    下文中的方案,建立了3个实例,端口分别为3306, 3307, 3308。

    1.创建MySQL用户账号

    首先创建mysql用户组和用户。
    并设置不允许登录。

    # groupadd mysql
    # useradd -s /sbin/nologin -g mysql -M mysql
    
    • -s/sbin/nologin表示禁止该用户登录,只需要角色存在即可,加强安全。
    • -g mysql指定mysql用户属于mysql组。
    • -M表示不创建用户家目录。

    2.安装

    2.1下载安装文件

    下载地址
    https://downloads.mysql.com/archives/community/

    版本 5.7.27
    二进制安装文件 mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz

    2.2 解压安装文件

    解压二进制文件,移动到指定目录,并创建软链接。

    [root@localhost tmp]# tar zvxf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
    
    [root@localhost tmp]# mkdir -p /application
    
    [root@localhost tmp]# mv mysql-5.7.27-linux-glibc2.12-x86_64 /application/mysql-5.7.27
    
    [root@localhost tmp]# ln -s /application/mysql-5.7.27 /application/mysql
    

    这里使用/application/作为安装目录。

    2.3 创建数据文件目录

    创建3个数据文件目录:

    mkdir -p /data/{3306,3307,3308}/data
    

    2.4 创建配置文件

    创建3个实例的3个配置文件,分别为,
    /data/3306/my.cnf
    /data/3307/my.cnf
    /data/3308/my.cnf

    其中,3306的配置文件内容如下:

    [mysql]
    default-character-set = utf8
    port = 3306
    socket = /data/3306/mysql.sock
    
    [mysqld]
    user = mysql
    log-bin = mysql-bin
    port = 3306
    
    socket = /data/3306/mysql.sock
    basedir = /application/mysql
    datadir = /data/3306/data
    
    character-set-server = utf8
    
    pid-file = /data/3306/mysql.pid
    relay-log = /data/3306/relay-bin
    relay-log-info-file = /data/3306/relay-log.info
    
    ## server-id ##
    server-id = 1
    
    # gtid
    gtid_mode = on
    enforce-gtid-consistency = true
    
    log-slave-updates = on
    
    skip_slave_start = 1
    
    # 记录 relay.info 到数据表中
    relay_log_info_repository = TABLE
    # 记录 master.info 到数据表中
    master_info_repository = TABLE
    
    [mysqld_safe]
    log-error = /data/3306/mysql_3306.err
    pid-file = /data/3306/mysqld.pid
    

    其他两个实例 3307,3308的配置文件,需要将'3306'修改为对应的端口号,并将server-id 设置为2、3。
    另外,需要将/etc/my.cnf删除。

    2.5 创建启动文件

    3个实例的启动文件分别为:
    /data/3306/mysql
    /data/3307/mysql
    /data/3308/mysql

    启动文件的创建方式如下。
    首先,拷贝安装包中的启动文件mysql.server,

     cp /application/mysql/support-files/mysql.server /data/3306/mysql
    

    接着,在文件开头添加MYSQL_HOME环境变量

    export MYSQL_HOME=/data/3306
    

    3307,3308的启动文件使用相同的方式进行创建。

    2.6 修改文件夹权限

    将/data目录用户属主修改为mysql:

    chown -R mysql.mysql /data
    

    2.7 初始化数据库文件

    分别为实例3306,3307, 3308初始化数据库文件:

    # cd /application/mysql/bin
    
    [root@localhost bin]# ./mysqld --initialize  --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
    2020-01-28T08:00:35.203296Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2020-01-28T08:00:35.507051Z 0 [Warning] InnoDB: New log files created, LSN=45790
    2020-01-28T08:00:35.559643Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
    2020-01-28T08:00:35.630885Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 43cf1658-41a4-11ea-9f90-080027974966.
    2020-01-28T08:00:35.633731Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
    2020-01-28T08:00:35.634290Z 1 [Note] A temporary password is generated for root@localhost: H_Bia>K/Y2tt
    
    
    [root@localhost bin]# ./mysqld --initialize  --basedir=/application/mysql --datadir=/data/3307/data --user=mysql
    2020-01-28T08:06:53.599276Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2020-01-28T08:06:53.855428Z 0 [Warning] InnoDB: New log files created, LSN=45790
    2020-01-28T08:06:53.895878Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
    2020-01-28T08:06:53.957149Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 254f18a1-41a5-11ea-be32-080027974966.
    2020-01-28T08:06:53.960087Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
    2020-01-28T08:06:53.960716Z 1 [Note] A temporary password is generated for root@localhost: &Agc;sJX1MGy
    
    [root@localhost bin]# ./mysqld --initialize  --basedir=/application/mysql --datadir=/data/3308/data --user=mysql
    2020-01-28T08:07:04.398172Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
    2020-01-28T08:07:04.647708Z 0 [Warning] InnoDB: New log files created, LSN=45790
    2020-01-28T08:07:04.696848Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
    2020-01-28T08:07:04.757893Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 2bbf28c5-41a5-11ea-bf30-080027974966.
    2020-01-28T08:07:04.760586Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
    2020-01-28T08:07:04.761052Z 1 [Note] A temporary password is generated for root@localhost: h0u:SPJSe8R*
    

    初始化过程中,会创建临时密码,用于登录。

    2.8 启动数据库

    # /data/3306/mysql start
    Starting MySQL.                                            [  OK  ]
    

    查看服务是否启动成功

    [root@localhost data]# ps -ef | grep mysql
    root     17839     1  0 11:03 pts/2    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-file=/data/3306/mysql.pid
    mysql    18090 17839  2 11:03 pts/2    00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/data/3306/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3306/mysql_3306.err --pid-file=/data/3306/mysql.pid --socket=/data/3306/mysql.sock --port=3306
    root     18133 12155  0 11:03 pts/2    00:00:00 grep mysql
    [root@localhost data]# 
    [root@localhost data]# netstat -anp | grep 3306
    tcp        0      0 :::3306                     :::*                        LISTEN      18090/mysqld        
    unix  2      [ ACC ]     STREAM     LISTENING     69304  18090/mysqld        /data/3306/mysql.sock
    

    mysql服务启动后,重新设置密码

    # /application/mysql/bin/mysqladmin -S /data/3306/mysql.sock -u root password 'mysql123456' -p
    Enter password: 
    mysqladmin: [Warning] Using a password on the command line interface can be insecure.
    Warning: Since password will be sent to server in plain text, use ssl connection to ensure password safety.
    

    登录MySQL测试

    # mysql -S /data/3306/mysql.sock -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 3
    Server version: 5.7.27-log MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    

    3.问题

    # /data/3306/mysql start
    Starting MySQL.2020-01-28T02:33:58.935315Z mysqld_safe error: log-error set to '/data/3306/mysql_3306.err', however file don't exists. Create writable for user 'mysql'.
    The server quit without updating PID file (/data/3306/mysql[FAILED]
    

    解决办法:

    # touch /data/3306/mysql_3306.err
    # chown -R mysql:mysql /data/3306/mysql_3306.err
    

    4.参考

    mysql 配置优化
    MySQL 5.7 my.cnf配置文件说明
    MySQL5.7官方安装文档

  • 相关阅读:
    SDUT 1570 C 旅行(DFS)
    SDUT 1269 走迷宫(BFS)
    求连通分量个数
    Codeforces Round #237 (Div. 2)
    FZU 2150 Fire Game(BFS)
    HDU 2045 不容易系列之(3)—— LELE的RPG难题(递推)
    LeetCode 155. Min Stack
    【ZZ】终于有人把云计算、大数据和人工智能讲明白了!
    学习笔记之Microsoft Office 365
    【ZZ】技能表合集
  • 原文地址:https://www.cnblogs.com/lanyangsh/p/12238222.html
Copyright © 2011-2022 走看看