• mysql的程序结构,实例, 及mysql的多实例


    一.mysqld 的程序结构

    1.连接层
             1)检验用户的合法性
             2)提供两种连接方式
                    a)TCP/IP
                    [root@db02 ~]# mysql -uroot -p123 -h10.0.0.51
                    [root@db01 ~]# mysql -uroot -p123 -h127.0.0.1

                    b)socket
                    [root@db01 ~]# mysql -uroot -p123 -S /usr/local/mysql/tmp/mysql.sock
                    [root@db01 ~]# mysql -uroot -p123 -hlocalhost
                    [root@db01 ~]# mysql -uroot -p123
                    3)建立一个与SQL层交互的线程

    2.SQL层
    1)接收连接层传来的SQL语句
    2)检查语法
    3)检查语义(检查它属于哪种SQL语句:DDL,DML,DCL,DQL)
    4)解析器:解析SQL语句,生成多种执行计划
    5)优化器:接收解析器传来的多种执行计划,选择最优化的一条方式去执行
    6)执行器:执行优化器传来的最优方式的SQL语句
    a)建立一个与存储引擎层交互的线程
    b)接收存储引擎层,返回的结构化成表的数据
    7)写缓存
    8)记录日志


    3.存储引擎层
    1)接收SQL层传来的SQL语句
    2)与磁盘交互,找到数据并结构化成表的形式,返回给SQL层
    3)建立一个与SQL层交互的线程

    二.什么是实例?

    1.MySQL的后台进程+线程+预分配的内存结构。
    2.MySQL在启动的过程中会启动后台守护进程,并生成工作线程,预分配内存结构供MySQL处理数据使用。


    多实例:
    1)多个进程
    2)多个线程
    3)多个预分配的内存结构


    多套配置文件:
    多个端口
    多套数据目录(--datadir=/usr/local/mysql/data)
    多个socket文件

    [root@db01 ~]# mkdir -p /data/330{7..9}
    
    [root@db01 ~]# tree /data/
    /data/
    ├── 3307
    ├── 3308
    └── 3309
    
    [root@db01 ~]# ll /data/
    total 0
    drwxr-xr-x. 2 root root 6 May  9 09:59 3307
    drwxr-xr-x. 2 root root 6 May  9 09:59 3308
    drwxr-xr-x. 2 root root 6 May  9 09:59 3309
    
    2.编辑多个配置文件
    [root@db01 ~]# vim /data/3307/my.cnf
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/data/3307/data
    port=3307
    socket=/data/3307/mysql.sock
    server-id=7
    log_error=/data/3307/data/mysql.err
    pid=/data/3307/data/mysql.pid
    
    ========================================
    
    [root@db01 ~]# vim /data/3308/my.cnf
    i
    
    =========================================
    
    [root@db01 ~]# vim /data/3309/my.cnf
    [mysqld]
    basedir=/usr/local/mysql
    datadir=/data/3309/data
    port=3309
    socket=/data/3309/mysql.sock
    server-id=9
    log_error=/data/3309/data/mysql.err
    pid=/data/3309/data/mysql.pid
    
    
    2.进入初始化目录
    [root@db01 ~]# cd /usr/local/mysql/scripts/
    
    3.初始化多套数据目录
    [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
    [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
    [root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data
    
    [root@db01 scripts]# ll /data/330*
    /data/3307:
    total 4
    drwx------. 5 mysql mysql 127 May  9 10:11 data
    -rw-r--r--. 1 root  root  175 May  9 10:05 my.cnf
    
    /data/3308:
    total 4
    drwx------. 5 mysql mysql 127 May  9 10:12 data
    -rw-r--r--. 1 root  root  175 May  9 10:06 my.cnf
    
    /data/3309:
    total 4
    drwx------. 5 mysql mysql 127 May  9 10:12 data
    -rw-r--r--. 1 root  root  175 May  9 10:07 my.cnf
    
    
    4.授权
    [root@db01 scripts]# chown -R mysql.mysql /data/330*
    
    5.启动mysql
    [root@db01 scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf &
    [root@db01 scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf &
    [root@db01 scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &
    
    6.检查端口
    [root@db01 scripts]# netstat -lntup|grep 330
    tcp6       0      0 :::3306                 :::*                    LISTEN      41108/mysqld        
    tcp6       0      0 :::3307                 :::*                    LISTEN      42206/mysqld        
    tcp6       0      0 :::3308                 :::*                    LISTEN      42378/mysqld        
    tcp6       0      0 :::3309                 :::*                    LISTEN      42550/mysqld  
    
    7.检查进程
    [root@db01 scripts]# ps -ef|grep mysqld
    root      40999      1  0 08:54 pts/0    00:00:00 /bin/sh /usr/local/mysql-5.6.40/bin/mysqld_safe --datadir=/usr/local/mysql-5.6.40/data --pid-file=/usr/local/mysql-5.6.40/data/db01.pid
    mysql     41108  40999  0 08:54 pts/0    00:00:03 /usr/local/mysql-5.6.40/bin/mysqld --basedir=/usr/local/mysql-5.6.40 --datadir=/usr/local/mysql-5.6.40/data --plugin-dir=/usr/local/mysql-5.6.40/lib/plugin --user=mysql --log-error=db01.err --pid-file=/usr/local/mysql-5.6.40/data/db01.pid
    root      42056   7747  0 10:18 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf
    mysql     42206  42056  0 10:18 pts/0    00:00:00 /usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/usr/local/mysql --datadir=/data/3307/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3307/data/mysql.err --pid-file=db01.pid --socket=/data/3307/mysql.sock --port=3307
    root      42228   7747  0 10:18 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3308/my.cnf
    mysql     42378  42228  4 10:18 pts/0    00:00:03 /usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --basedir=/usr/local/mysql --datadir=/data/3308/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3308/data/mysql.err --pid-file=db01.pid --socket=/data/3308/mysql.sock --port=3308
    root      42379   7747  0 10:18 pts/0    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3309/my.cnf
    mysql     42550  42379  2 10:18 pts/0    00:00:02 /usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf --basedir=/usr/local/mysql --datadir=/data/3309/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/3309/data/mysql.err --pid-file=db01.pid --socket=/data/3309/mysql.sock --port=3309
    root      42577   7747  0 10:20 pts/0    00:00:00 grep --color=auto mysqld
    
    
    8.多实例设置密码
    [root@db01 ~]# mysqladmin -uroot -p -S /data/3307/mysql.sock  password 3307
    [root@db01 ~]# mysqladmin -uroot -p -S /data/3308/mysql.sock  password 3308
    [root@db01 ~]# mysqladmin -uroot -p -S /data/3309/mysql.sock  password 3309
    
    9.多实例连接
    [root@db01 ~]# mysql -uroot -p3307 -S /data/3307/mysql.sock
    [root@db01 ~]# mysql -uroot -p3308 -S /data/3308/mysql.sock
    [root@db01 ~]# mysql -uroot -p3309 -S /data/3309/mysql.sock
    
    10.连接技巧
    [root@db01 ~]#
    mysql -uroot -p3307 -S /data/3307/mysql.sock
    
    [root@db01 ~]# vim /usr/local/mysql/bin/mysql3308
    mysql -uroot -p3308 -S /data/3308/mysql.sock
    
    [root@db01 ~]# vim /usr/local/mysql/bin/mysql3309
    mysql -uroot -p3309 -S /data/3309/mysql.sock
    
    [root@db01 ~]# chmod +x /usr/local/mysql/bin/mysql330*
    
    11.停止mysql多实例
    [root@db01 ~]# mysqladmin -uroot -p3307 -S /data/3307/mysql.sock shutdown
    [root@db01 ~]# mysqladmin -uroot -p3308 -S /data/3308/mysql.sock shutdown
    [root@db01 ~]# mysqladmin -uroot -p3309 -S /data/3309/mysql.sock shutdown
    /
    

      

  • 相关阅读:
    网页瀑布流收集
    Docker
    CI/CD/Jenkins
    ckplayer获取播放时长一
    aliplay获取播放时长
    06 intent flag三种属性
    06 Activity隐式跳转
    06 Activity显示跳转
    06 Activity的启动模式 Intent的七大属性的总结
    06 Activity OnNewIntent方法
  • 原文地址:https://www.cnblogs.com/sudaguo/p/10840631.html
Copyright © 2020-2023  润新知