• mysql -> 启动&多实例_03


    常用的连接方式:

    套接字:  mysql -uroot -p123  -S /application/mysql/tmp/mysql.sock
    Tcp/Ip: mysql -uroot -p123 -h 10.0.0.52 -P 3306

    数据库的启动流程

    mysqld 文件属性
    [root@db02 ~]# cd /application/mysql/bin/
    [root@db02 bin]# file mysqld
    mysqld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
    
    mysql.server文件属性
    [root@db02 bin]# file ../support-files/mysql.server 
    ../support-files/mysql.server: POSIX shell script text executable
    
    mysqld_safe文件属性
    [root@db02 data]# file /application/mysql/bin/mysqld_safe 
    /application/mysql/bin/mysqld_safe: POSIX shell script text executable
    

    注:可以看出mysql.server文件与mysqld_safe文件都是脚本文件,最后都调用mysqld二进制文件进行启动。

    my.cnf 配置文件说明

    功能 

        1、影响到服务器进程的启动

        2、影响到客户端程序

    配置my.cnf

                      使用不同的"标签"去明确指定影响哪部分功能

                      服务器端

    my.cnf文件配置实例

    [root@db02 data]# cat /etc/my.cnf
    [mysqld]
    basedir=/application/mysql
    datadir=/application/mysql/data
    socket=/tmp/mysql.sock
    log-error=/var/log/mysql.log
    port=3307
    [mysql]
    socket=/tmp/mysql.sock
    user=root
    password=123

    检查进程信息,可以看到与my.cnf配置的相同

    [root@db02 data]# ps -ef |grep [my]sql 
    root       3411   1918  0 15:52 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe
    mysql      3548   3411  0 15:52 pts/1    00:00:00 /application/mysql/bin/mysqld --basedir=/application/mysql --datadir=/application/mysql/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/var/log/mysql.log --pid-file=/application/mysql/data/db02.pid --socket=/tmp/mysql.sock --port=3307

    配置文件的读取过程

    /etc/my.cnf --> /etc/mysql/my.cnf --> $MYSQL_HOME/my.cnf --> defaults-extra-file=/tmp/clsn.txt --> ~/.my.cnf
    

    注:

    假设4个配置文件都存在,同时使用--defaults-extra-file指定了参数文件,如果这时有一个 "参数变量"在5个配置文件中都出现了,那么后面的配置文件中的参数变量值会覆盖前面配置文件中的参数变量值,就是说会使用 ~/.my.cnf 中设置的值

    如果使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了 --defaults-file=<配置文件的绝对路径>参数,这时只会使用这个参数指定的配置文件。

    mysql多实例配置

      

      简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306/3307)同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。

      这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,他们根据配置文件对应设定值,获得服务器响应数量的资源。

    多实例的作用与问题 

    1、有效利用服务器资源,充分利用剩余的资源提供更多的服务

    2、节约服务器资源,需要主从同步等技术时,多实例就再好不过了

    3、资源互抢问题,当某个服务实例并发很高或者慢查询时,

    整个实例会消耗更多的内存、CPU、磁盘IO资源

    多实例生产场景应用 

    1、资金紧张性公司的选择 
      资金紧张,公司业务访问量又不大,但又希望不同的业务的数据库服务各自尽量独立 
    2、并发访问不是特别大的业务 
      当公司业务访问量不太大的时候,服务器的资源基本都是浪费的,这就适合多实例的使用 
    3、门户网站应用MySQL多实例场景 
      配置硬件好的服务器,可以节省IDC机柜空间,跑多实例也不会减少硬件资源不慢的浪费 
      一般是从库多实例,例如:某部门使用IBM服务器为48核CPU,内存96GB、一台服务器跑3~4个实例:此外,sina网也是用的多实例,内存48GB左右。企业环境中一般将多实例应用在测试环境。

    配置方案  

    1、多个配置文件,多个启动程序(比较好,推荐)

    2、单一配置文件,多个启动程序(官方推荐,耦合性太高,不好)

    单机运行1~4个数据库实例

    多实例配置过程

    (1)准备多个目录

    [root@mysql ~]# mkdir -p /data/330{7,8,9}/data
    [root@mysql 3308]# tree /data/
    [root@db01 data]# tree 
    .
    ├── 3307
    │   └── data
    ├── 3308
    │   └── data
    ├── 3309
    │   └── data

    (2)准备配置文件(配置文件与初始化先后顺序不影响,但注意初始化路径)

    [root@mysql ~]# cat /data/3307/my.cnf 
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/data/3307
    socket=/data/3307/mysql.sock
    log_error=/data/3307/mysql.log
    user=mysql
    port=3307
    server_id=7

    [root@mysql ~]# cat /data/3308/my.cnf [mysqld] basedir=/usr/local/mysql datadir=/data/3308 socket=/data/3308/mysql.sock log_error=/data/3308/mysql.log user=mysql port=3308 server_id=8

    [root@mysql data]# cat 3309/my.cnf [mysqld] basedir=/usr/local/mysql datadir=/data/3309 socket=/data/3309/mysql.sock log_error=/data/3309/mysql.log user=mysql port=3309 server_id=9

    (3)初始化三套数据

    mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/usr/local/mysql
    mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/usr/local/mysql
    mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/usr/local/mysql

    (4)systemd管理多实例

    cd /etc/systemd/system
    cp mysqld.service mysqld3307.service 
    cp mysqld.service mysqld3308.service 
    cp mysqld.service mysqld3309.service 

    [root@mysql system]# vim mysqld3307.service 
    ......
    ExecStart=/usr/local/mysql/bin/mysqld--defaults-file=/data/3307/my.cnf
    
    [root@mysql system]# vim mysqld3308.service 
    ......
    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
    
    [root@mysql system]# vim mysqld3309.service 
    ......
    ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf

    (5)授权

    chown -R mysql.mysql /data/*
    
    //重载守护进程   systemctl daemon reload
    Warning: mysqld3309.service changed on disk. Run 'systemctl daemon-reload' to reload units.

    (6)启动

    systemctl start mysqld3307.service 
    systemctl start mysqld3308.service 
    systemctl start mysqld3309.service 

    查看端口是否启动mysqld

    [root@mysql system]# netstat -lntup | grep 330
    tcp6       0      0 :::3306                 :::*                    LISTEN      2536/mysqld         
    tcp6       0      0 :::3307                 :::*                    LISTEN      3168/mysqld         
    tcp6       0      0 :::3308                 :::*                    LISTEN      3203/mysqld         
    tcp6       0      0 :::3309                 :::*                    LISTEN      3238/mysqld  

    登录数据库

    [root@mysql system]# mysql -S /data/3307/mysql.sock   //-S, --socket=name   连接服务器的sockey文件
    

    检查创建实例是否存在

    mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
    mysql -S /data/3308/mysql.sock -e "show variables like 'server_id'"
    mysql -S /data/3309/mysql.sock -e "show variables like 'server_id'"
    
    //例如:
    [root@mysql system]# mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id     | 7     |
    +---------------+-------+

    3306多实例管理脚本

     1 [root@db02 /]# cat data/3306/mysql 
     2 #!/bin/sh
     3 #3306 start scripts
     4 #init
     5 port=3306
     6 mysql_user="root"
     7 CmdPath="/application/mysql/bin"
     8 mysql_sock="/data/${port}/mysql.sock"
     9 mysqld_pid_file_path=/data/3306/3306.pid
    10 start(){
    11     if [ ! -e "$mysql_sock" ];then
    12          printf "Starting MySQL...
    "
    13         /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
    14         sleep 3
    15     else
    16         printf "MySQL is running...
    "
    17         exit 1
    18     fi
    19 }
    20 stop(){
    21     if [ ! -e "$mysql_sock" ];then
    22         printf "MySQL is stopped...
    "
    23         exit 1
    24     else
    25         printf "Stoping MySQL...
    "
    26         mysqld_pid=`cat "$mysqld_pid_file_path"`
    27          if (kill -0 $mysqld_pid 2>/dev/null)
    28            then
    29              kill $mysqld_pid
    30              sleep 2
    31          fi
    32     fi
    33 }
    34 
    35 restart(){
    36     printf "Restarting MySQL...
    "
    37     stop
    38     sleep 2
    39     start
    40 }
    41 
    42 case "$1" in
    43     start)
    44         start
    45     ;;
    46     stop)
    47         stop
    48     ;;
    49     restart)
    50         restart
    51     ;;
    52     *)
    53         printf "Usage: /data/${port}/mysql {start|stop|restart}
    "
    54 esac
    View Code

    3307多实例管理脚本

    1 [root@db02 /]# cat data/3307/mysql 
     2 #!/bin/sh
     3 #3307 start scripts
     4 #init
     5 port=3307
     6 mysql_user="root"
     7 CmdPath="/application/mysql/bin"
     8 mysql_sock="/data/${port}/mysql.sock"
     9 mysqld_pid_file_path=/data/3307/3307.pid
    10 start(){
    11     if [ ! -e "$mysql_sock" ];then
    12          printf "Starting MySQL...
    "
    13         /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
    14         sleep 3
    15     else
    16         printf "MySQL is running...
    "
    17         exit 1
    18     fi
    19 }
    20 stop(){
    21     if [ ! -e "$mysql_sock" ];then
    22         printf "MySQL is stopped...
    "
    23         exit 1
    24     else
    25         printf "Stoping MySQL...
    "
    26         mysqld_pid=`cat "$mysqld_pid_file_path"`
    27          if (kill -0 $mysqld_pid 2>/dev/null)
    28            then
    29              kill $mysqld_pid
    30              sleep 2
    31          fi
    32     fi
    33 }
    34 
    35 restart(){
    36     printf "Restarting MySQL...
    "
    37     stop
    38     sleep 2
    39     start
    40 }
    41 
    42 case "$1" in
    43     start)
    44         start
    45     ;;
    46     stop)
    47         stop
    48     ;;
    49     restart)
    50         restart
    51     ;;
    52     *)
    53         printf "Usage: /data/${port}/mysql {start|stop|restart}
    "
    54 esac
    View Code
  • 相关阅读:
    day17-jdbc 7.Statement介绍
    day17-jdbc 6.Connection介绍
    day17-jdbc 5.url介绍
    day17-jdbc 4.DriverManager详解
    day17-jdbc 3.jdbc快速入门
    SSH原理与运用
    SSH原理与运用
    11 个 Linux 上最佳的图形化 Git 客户端
    11 个 Linux 上最佳的图形化 Git 客户端
    11 个 Linux 上最佳的图形化 Git 客户端
  • 原文地址:https://www.cnblogs.com/tim1blog/p/9882255.html
Copyright © 2020-2023  润新知