zoukankan      html  css  js  c++  java
  • Mysql原理+ 多实例 +表损坏

    mysql的执行流程:

    1.客户端请求,服务端(连接器)开辟线程相应用户

     2.用户发起SQL语句查询数据库

     3.查询缓存:记录用户的SQL查询语句。如果再次查询同样内容。就返回缓存

     4.如果缓存没有进入分析器。(分析器也可能借鉴缓存)

    语法分析器:用户命令语法是否正确

    词法分析器:将用户的命令进行切片,一个词一个词用空格隔开,获得用户要查询的表,内容,用户的权限等。


     5.优化:执行路径的选择,生成执行树,

      每一个SQL语句都有很多执行路径(比如多表关联查询时,哪两个表先结合查询,要通过优化器分析)。优化的目的就是在这些执行路径里面,选择一个最优的执行路径。

    6.存储引擎:用于管理存储在文件系统。甚至是裸设备上的数据管理程序,它本身给上层应用提供不同的管理,有的支持事务,有的不支持事务。
    数据库的对象:

      1.逻辑对象:表,微微关系,索引,视图,触发器,存储过程,存储函数,时间调度器,游标,用户。

       2.物理对象:数据管理组件(也可称为元数据),存储引擎,存储为物理文件。

    数据库管理系统的基本功能:

     管理存储,安全管理,元数据管理,事务管理,ACID(原子性,一致性,隔离性,持久性),连接管理,性能优化,备份和还原机制,相应数据查询/修改请求。

    存储引擎:将数据存储下来的中间层

    (数据库引擎是用于存储、处理和保护数据的核心服务。利用数据库引擎可控制访问权限并快速处理事务,从而满足企业内大多数需要处理大量数据的应用程序的要求。)

    如mysql数据库引擎:   MyISAM和InnoDB(MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持;但是MyISAM表的查询操作效率和速度都比InnoDB要快)

    日志文件:

    Redo、Undo、Data、Index、Error、Query、Slow

    什么是实例?

    进程+多个线程+预分配的内存结构

    MySQL多实例:


    多个进程+多个线程+多个预分配内存结构

    多个配置文件:


    1)多个端口
    2)多个数据目录
    3)多个socket文件

    ./mysql_install_db --user --basedir --datadir


    1)创建多个数据目录
    [root@elk01 ~]# mkdir -p /data/330{7..9}
    2)创建多个配置文件

    vim /data/3307/my.cnf
    [mysqld]
    basedir = /usr/local/mysql
    datadir = /data/3307/data
    port = 3307
    server_id = 7
    log-bin = /data/3307/data/mysql-bin
    log_error = /data/3307/data/mysql.err
    socket = /data/3307/data/mysql.sock

    vim /data/3308/my.cnf

    [mysqld]
    basedir = /usr/local/mysql
    datadir = /data/3308/data
    port = 3308
    server_id = 8
    log-bin = /data/3308/data/mysql-bin
    log_error = /data/3308/data/mysql.err
    socket = /data/3308/data/mysql.sock

    vim /data/3309/my.cnf

    [mysqld]
    basedir = /usr/local/mysql
    datadir = /data/3309/data
    port = 3309
    server_id = 9
    log-bin = /data/3309/data/mysql-bin
    log_error = /data/3309/data/mysql.err
    socket = /data/3309/data/mysql.sock

    3)初始化
    [root@elk01 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
    [root@elk01 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
    [root@elk01 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data

    4)启动MySQL
    [root@elk01 scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf &
    [root@elk01 scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf &
    [root@elk01 scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &


    5)设置密码
    [root@elk01 scripts]# mysqladmin -uroot -S /data/3307/data/mysql.sock password '3307'
    [root@elk01 scripts]# mysqladmin -uroot -S /data/3308/data/mysql.sock password '3308'
    [root@elk01 scripts]# mysqladmin -uroot -S /data/3309/data/mysql.sock password '3309'


    6)查看
    [root@elk01 scripts]# mysql -uroot -p3307 -S /data/3307/data/mysql.sock -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id | 7 |
    +---------------+-------+
    [root@elk01 scripts]# mysql -uroot -p3308 -S /data/3308/data/mysql.sock -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id | 8 |
    +---------------+-------+
    [root@elk01 scripts]# mysql -uroot -p3309 -S /data/3309/data/mysql.sock -e "show variables like 'server_id'"
    Warning: Using a password on the command line interface can be insecure.
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | server_id | 9 |
    +---------------+-------+


    [root@elk01 scripts]# vim /usr/local/bin/mysql3307
    mysql -uroot -p3307 -S /data/3307/data/mysql.sock

    [root@elk01 scripts]# vim /usr/local/bin/mysql3308
    mysql -uroot -p3308 -S /data/3308/data/mysql.sock

    [root@elk01 scripts]# vim /usr/local/bin/mysql3309
    mysql -uroot -p3309 -S /data/3309/data/mysql.sock

    [root@elk01 scripts]# chmod +x /usr/local/bin/mysql330*

    在没有备份的情况下表损坏企业案例:

    1)找开发拿到建表语句
    2)创建一个新的MySQL实例,创建表
    3)删除独立表空间
    mysql> alter table city_new discard tablespace;
    4)拷贝旧表的表空间文件到新表下
    5)导入独立表空间
    mysql> alter table city_new import tablespace;

  • 相关阅读:
    二维数组中的查找--python实现
    redis 学习笔记二
    redis 学习笔记(一)
    mysql sql知识总结
    工作或日常生活工具网站
    Git冲突:commit your changes or stash them before you can merge. 解决办法
    pandas 学习二
    python supervisor 守护进程 防止进程掉线
    pandas 学习
    django 定时器
  • 原文地址:https://www.cnblogs.com/du-jun/p/10712281.html
Copyright © 2011-2022 走看看