前面Linux运维基础告一段落,今天开始新一阶段的高级运维课程!


一、mysql基础知识

    1、关系型数据库基础理论及MySQL数据库基础架构
           关系型数据的基础理论
                    文件系统上:最初所有的数据都存储于文件中,每次读取文件时需要把所有的块数据都加载到内存中,             通过工具grep查询需要的数据,如果文件比较大(100万行),这时加载会很慢而且占用资源比较大。

           数据管理软件:    
                         层次模型、网状模型、关系模型、对象-关系模型、非关系模型     
           DBMS: Database Management System    
                         mysql对每个客户请求都是由一个线程来响应,   

    2、MySQL核心概念及MariaDB编译安装          

            数据存储机制:
                    数据按索引顺序存储,索引顺序文件
                    数据是按需随机存放,堆文件      

            mysql核心部件组成:
                    connection pool(连接池) ,负责用户认证、线程重用、连接限制、内存检查、提供缓存     
                    sql interface(sql 接口),负责DML、DDL、触发器各类功能
                    parser(分析器),对象权限检查,查询转换,把用户写的sql语句转换为数据库能执行的语句。
                    optimizer(优化器),优化mysql性能
                    caches&&buffers(缓存和缓冲),用于提升mysql I/O方面性能
           之后就是选择使用存储引擎。存储引擎就可以直接读取文件系统中的文件。
                   MyISAM、InnoDB、Memory、Merge、Federated、CSV、Archive、Blackholl、Aria、SphinxSE、    TokuDB        

            

   二、安装方式: (rpm包、os vendor、mysql)(通用二进制格式)(源码包)

            编译方式安装mariadb:

            #yum install cmake   安装cmake编译环境

            #useradd -r mysql

            #mkdir /mydata/data -pv

            #chown -R mysql.mysql /mydata/data

            #cmake . -DMYSQL_DATADIR=/mydata/data -DWITH_SSL=system  默认路径/usr/local/mysql  安装选               项参考 《MySQL Compiling and Installation》

            #make && make install

            #cd /usr/local/mysql

            #cp support-files/mysql.server /etc/rc.d/init.d/mysqld

            #chmod +x /etc/rc.d/init.d/mysqld

            #cp support-files/my-lange.cnf /etc/my.cnf

            #vi /etc/my.cnf 定义路径 datadir=/mydata/data

            #ls /mydata/data  查看,没有数据库 需要初始化数据库

            #scripts/mysql_install_db --user=mysql --datadir=/mydata/data

      #services mysqld start

            #/usr/local/mysql/bin/mysql  访问mysql

            #SHOW ENGINES 查看支持的收索引擎

            #SHOW GLOBAL VARIABLES LIKE '%SSL%'


       MySQL的数据文件:文件和日志

        文件:数据文件和索引文件

        日志:事务日志、二进制日志、查询日志、慢查询日志、错误日志、中继日志

        

        MySQL的服务器变量:

        SHOW {GLOBAL|SESSION} VARIABLES [LIKE CLAUSE];

        

        MySQL的状态变量:

        SHOW {GLOBAL|SESSION} STATUS [LIKE CLAUSE];


三、安装和访问MySQL(初始化)

    1、给root设置密码

        @内置命令 set password for 'username@host' = password('password')

        >use mysql

        >select user,password,host from user;  查看管理员账号和匿名账号(user表)

        >set password for 'root@localhost' = passwrod('magedu')

        >select user,password,host from user;

        @update user set password=PASSWORD('magedu') where user='root';

        @#mysqladmin -u root -p password 'new_password'  回车后输入旧密码

        如:/usr/local/mysql/bin/mysqladmin -u root -h127.0.0.1 -p password 'new_password'; 回车输入旧密码

    2、删除匿名用户

        @ #drop user ''@'hostname’;删除匿名用户

          修改环境变量:vi /etc/profile.d/mysql.sh 

                添加 export PATH=/usr/local/mysql/bin:$PATH

                    #./etc/profile.d/mysql.sh

                    #mysql -u root -p  

                    #输入旧密码

        @ >delete from user where user=''; 删除匿名用户


四、配置文件:所有的mysql程序都可以以此文件作为其配置文件

    例如:mysqld, mysql, mysqladmin, mysqld_safe

    [program]

    parameter1 =   

       获取帮助:mysqld --verbose --help

         --option, -option: 命令行选项

        

        Default options are read from the following files in the given order:

        /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 

        

        --defaults-extra-file=#:额外读取的配置文件;      

        --defaults-file=#: 仅读取此处指定的配置文件

        

        mysql程序的类别:

        服务器端程序:启动并监听于套接字上;mysqld, mysqld_safe, mysqld_multi

        客户端程序:可通过mysql协议连入服务器并发出请求的;mysql, mysqlbinlog, mysqladmin, mysqldump等

        工具程序:运行于服务器进程所在的主机,实现一些管理或维护操作,myisamchk

        

        客户端程序的通用选项:

        -u, --user=             -u root, -uroot, --user=root

        -h, --host=

        -p, --password=       

        --protocol=

        tcp: 

        socket: unix sock

        pipe:

        memory:        

        --port: 当Protocol是tcp时使用的端口;

        --socket: 相当于--protocol socket

        

        其它选项: -D  --database=


五、mysql客户端程序:mysql

        批模式:mysql < /path/from/somefile.sql

        交互式模式:

            命令有两类:

                客户端命令:help可列出所有命令

                    clear, \c: 

                    ego, \G:

                    go, \g:

                    delimiter, \d:

                    quit, exit, \q: 

                    source, \. /path/from/somefile.sql: 

                    相当于mysql < /path/from/somefile.sql

                    system, \! COMMAND: 运行shell命令

                    use, \u DB_NAME: 将指定的库设为默认库

                   服务器端命令:help KEYWORD

                    SQL语句:DDL、DML

mysqladmin工具:

    create DB_NAME:

    mysqldadmin [options] create DB_NAME;

    drop DB_NAME:

    status: 显示mysqld的简单要状态信息,专用选项--sleep #: 间隔秒数,--count #: 显示的次数

        mysqladmin status --sleep2 --count3

        mysqladmin status -uroot -p123456

    extend-status: 显示mysqld的所有服务器状态变量

    flush-privileges: 刷新授权表,相当于reload命令

    flush-hosts: 清除dns缓存及被拒绝的客户端列表缓存

    flush-logs: 滚动日志, 二进制日志和中继日志

    flush-status: 重置各状态变量

    flush-tables: 关闭当前打开的所有的表文件句柄;

    flush-treads: 重置线程缓存;

    password: 设置密码

    ping: 测试服务器是否在线

    processlist: 显示当前服务器上的所有线程

    refresh: 相当于执行flush-hosts和flush-logs

    shutdown: 关闭服务器进程 ;

    start-slave, stop-slave: 启动、关闭从服务器线程;

    variables: 显示服务器变量



    mysql功能特性补充:

        1、命令历史;

        2、命令行编辑功能:

                Ctrl+a: 快速移动光标至行首

                Ctrl+e: 快速移动光标至行尾

                Ctrl+w: 删除光标之前的单词

                Ctrl+u: 删除行首至光标处的所有内容

                Ctrl+y: 粘贴使用Ctrl+w或Ctrl+u删除的内容  

        3、mysql图形化的客户端程序:phpMyAdmin、Navicat for mysql、Toad for mysql、mysql front、sqlyog

         

        开发DBA:数据库设计(E-R)、SQL语句编写、自定义函数、存储过程、存储函数、触发器、事件调度器

        管理DBA:安装、升级服务器程序, 数据备份、恢复, 用户和权限管理, 指标监控、性能分析、基准测试, 语句优化, 数据字典, 按需配置服务器(服务器变量:默认的存储引擎、缓存、日志), 服务器的规模扩展架构设计及实施

        

        SQL语言的组成部分: DDL DML DCL 主键、外键、惟一键、条件、非空、事务  视图定义 事务控制

            

六、mysql数据类型及服务器变量

        数据类型的功用: 1、存储的值类型; 2、占据的最大存储空间; 3、定长、变长;

                         4、如何被索引和排序;5、是否能够被索引;


        数据字典:系统编目(system catalog) 保存了数据库服务器上的元数据    

            元数据:关系的名称  每个关系中各字段的名称  各字段的类型和长度  约束

                    每个关系上的视图的名字及视图的定义  授权的用户名字 用户的授权和帐户信息

                    统计类数据 每个关系中字段数; 每个关系中行数; 每个关系的存储方法;

                    元数据也通过数据库保存(infomation_schema、mysql、performance_schema)


        数据类型:

            字符型CHAR  VARCHAR BINARY VARBINAR 

            数值型 精确数值型INT DECIMAL 近似数值型 FLOAT DOUBLE

            日期时间型:DATE TIME DATETIME YEAR STAMP

            内建类型:ENUM SET


        字符型:

            CHAR:255

            VARCARH:65535

            TINYTEXT: 255

            TEXT: 65535

            MEDIUMTEXT: 2^24

            LONGTEXT: 2^32


            BINARY: 255

            VARBINARY:65535

            TINYBLOB

            BLOB

            MEDIUMBLOG

            LONGBLOB


        修饰符:

            NULL

            NOT NULL

            DEFAULT 'string'

            CHARACTER SET 'set'

            SHOW CHARACTER SET;

            COLLATION 'collation'

            SHOW COLLATION;


        字符有通配符: %: 匹配任意长度的任意字符、 _: 匹配任意单个字符;


        整型:

            TINYINT: 1Byte、

            SMALLINT: 2Bytes 

            MEDIUMINT: 3Bytes 

            INT:4Bytes 

            BININT:8Bytes 


        修饰符:

            UNSIGNED

            NULL

            NOT NULL

            DEFAULT #

            AUTO_INCREMENT: 自动增长

            特殊要求:非空,且必须是主键或惟一键;


        浮点型: FLOAT 单精度 DOUBLE 双精度


        修饰符:NOT NULL、NULL、DEFAULT、UNSIGNED


        布尔型:没有专用布尔型,其是TINYINT(1)的别名;


        日期时间型:DATE: 3Bytes、TIME: 3Bytes、DATETIME: 8Bytes、TIMESTAMP: 4Bytes

                    YEAR(2):1Byte、YEAR(4): 1Byte


        修饰符:NULL、 NOT NULL、 DEFAULT VALUE


        内建类型:

            ENUM:枚举,表示仅能从给出的选项选择其中一个;

            ENUM('string1','string2')

            SET:集合, 表示能使用给出的元素组合成字符串

            SET('a','b','c')


        MySQL sql_mode: 

            sql模式:用来限定mysqld的工作特性

            TRADITIONAL

            STRICT_TRANS_TABLES:对支持事务的表使用严格模式;

            STRICT_ALL_TABLES:对所有表使用严格模式


5、服务器变量的类型:

    全局:对所有会话都生效;

        所有的会话在建立时都从全局继承,但继承完成后每个会话独立维护自己会话级变量

        修改全局的服务器变量仅对之后建立的会话生效

        要求有管理权限

    会话:仅对当前会话有效;

        修改即刻生效;

        不要求管理权限


    修改方式:

        动态修改: 会话级别,立即生效;全局级别,新建立的会话有效;重启服务会失效

        静态修改:要修改配置文件,或修改传递给mysqld的选项的值;重启后有效;

        并非所有的服务器变量都支持动态修改;


    查看服务器变量:

        mysql> SHOW {GLOBAL|SESSION} VARIABLES [LIKE clause];

        mysql> SELECT @@{GLOBAL|SESSION}.VARIABLE_NAME;

        mysql> SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='';

        mysql> SELECT * FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='';


    动态修改变量的值:

        mysql> SET {GLOBAL|SESSION} VARIABLE_NAME='VALUE'

    让设置永久有效的方式:

        [mysqld]

        sql_mode = 'STRICT_ALL_TABLES'