安装mysql:
    1.yum
        #wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 从mysql官网上下载mysql的repo
        #yum -y install mysql-server

    2.二进制源码包
        #tar -xf mysql-xxx.tar.bz2
        #cd mysql-xxx
        #make && make install

    3.源码编译安装
        参见lamp中mysql的安装。


mysql初始化配置过程:
    安装完毕后必须要进行初始化配置。
    运行scripts/mysql_install_db脚本,完成初始化。
    或者执行mysql_install_db命令完成初始化。

    1.找配置文件my.cnf
        my.cnf在多个目录中存在,mysql启动是会按照如下次序寻找配置文件,多个配置文件中的选项若有相同,则以最后一个包含该选项的配置文件内容为准。

        类unix系统上:
            /etc/my.cnf
            /etc/mysql/my.cnf
            $MYSQL_HOME/my.cnf mysql实例目录中,mysql可以运行多个实例,多个文件夹中的mysql只要监听在不同端口上即可。
            --defaults-extra-file=FILE  mysql启动时指定选项--default-extra-file,手动指定配置文件。
            ~/.my.cnf 用户家目录下的隐藏文件

        win系统上:
            %WINDIR%\my.ini,%WINDIR%\my.cnf
            c:\my.ini,c:\my.cnf
            %INSTALLDIR%\my.ini,%INSTALLDIR%\my,cnf
            --defaults-extra-file=DIR mysql启动时指定选项--default-extra-file,手动指定

    2.自动生成以下数据库:
        mysql
            存放数据库账号,权限等等相关信息。

        information_schema
            mysql运行中产生的运行时数据在内存中的信息。

        performance_schema
            存放收集到的服务器性能参数。5.5后新增PERFORMANCE_SCHEMA引擎。


初始化后的配置:
    1.更改默认账号和密码:
        mysql初始化后会生成5个空密码的用户:
        3个root账号:
            root@127.0.0.1
            root@localhost
            root@HOSTNAME
        2个匿名账号:
            “@localhost
            ”@HOSTNAME
        删除匿名用户,给root用户设置密码。

    2.启用二进制日志和独立表空间
        二进制日志:
            服务启动时指定参数--log_bin=mysql-bin和--binlog_format=MIXED
            
        独立表空间:
            mysql>set global innodb_file _per_table=1





mysql通信:
    mysql是客户端程序,mysqld是服务端程序
    若myslql和mysqld在同一个类unix主机上,则二者通信是使用mysql.sock完成进程间通信。
    若在同一个win主机上,则通过共享内存或者是管道完成通信。

    若不在同一个主机上,则通过tcp/ip通信。注意,即便在同一个主机上,一旦HOST指定为ip地址不是本地,则mysql也是会使用tcp/ip来通信的。

    客户端工具:
        都受到配置文件中[client]的设定,而且选项上大体相同。

        mysql
        mysqlimport
        mysqldump  备份工具
        mysqladmin 管理工具
        mysqlcheck 检查数据库完整性。

    非客户端组件
        myisamchk 检查myisam表
        myisampack 压缩myisam表

    服务器端工具:
        mysqld  mysql服务器端程序
        mysqld_safe  安全线程的mysqld服务器程序
        mysqld_mulit 支持多实例的mysqld服务器程序



mysql客户端工具:
    #mysql [OPTION]
        [OPTION]
            -A --noauto-rehash --disable-auto-rehash 禁用名称补全
            -u --user USERNAME 不指定默认为root
            -p --password 'PASSWORD' 不指定默认为空
            -h HOSTNAME 不指定默认为localhost
            --protocol PROTO 指定协议,只有tcp是协议,剩下socket 、memory、pipe其实都是通信机制。默认不指定使用socket。
            --port PORT 指定端口。配合--protocol选项使用。不指定端口默认使用socket方式,同时也要看客户端和服务端是否为统一主机。
            -D --database DBNAME 设定默认数据库
            --compress 压缩所有的客户端和服务器之间的传输数据
            --ssl-ca=FILE 指定ca证书文件
            --ssl-capath=DIR   若有多个信任ca,则将所有证书放在一个目录中。
            --ssl-cert=FILE 指定自己的证书
            --ssl-cipher=CIPHER_LIST 指定加密算法列表
            --ssl-key=FILE 指定自己的秘钥文件
            --ssl-verify-erver-cert 是否验证服务器端证书,默认是off 。
            -H --html 以html格式输出表
            -X --xml 以xml格式输出表
            -e “STATMENT” 执行对应mysql语句


    #mysqladmin [OPTION] COMMAND [ARG] [COMMAND[ARG]] ...
        [OPTION]
            和mysql类似
        COMMAND
            paasowrd ‘PASSWD’ 设定密码为PASSWD
            create DBNAME 创建数据库名为DBNAME
            debug 发送相关信息到错误日志
            drop DBNAME 删除名为DBNAME的数据库
            ping 测试mysql服务器是否在线
            processlist 显示正在执行的进程(线程)列表
            status 显示mysql服务器的状态
                --sleep SEC 指定间隔秒数为SEC
                --count NUM 指定显示的总次数
            extended-status  显示服务器的状态变量
            variables 显示服务器的服务变量
            flush-hosts 刷新主机相关的信息。服务器会记录相关信息,会对主机做相应的限制,比方尝试次数太多就禁止登陆,防止攻击。刷新后即可正常登陆。
            flush-logs 刷新日志,实现二进制和中继的日志滚动
            flush-privileges 让服务器重读授权表
            flush-tables 关闭所有打开的表
            flush-threads 重置线程池,清除空闲线程
            flush-status 重置大多数的状态变量
            reload 等同于flush-privileges
            reflush 等同于flush-hosts 和flush-logs同时执行
            shutdown 关闭mysql服务器进程。
            version 显示mysql服务器的版本号及相关信息。
            start-slave 启动复制,启动从服务器的复制线程
                SQL thread
                IO thread
            stop-slave 关闭复制,停止从服务器的复制线程

其他客户端工具:
    phpMyAdmin
    Workbench
    MySQL Front


mysql的工作模式:
    交互式模式:
        mysql>
            客户端命令
                仅在客户端上执行。
            服务器端命令
                命令发送到服务器端,服务期执行后将结果返回到客户端。都必须使用语句结束符,默认为分号(;)。

    批处理模式(脚本模式):
        mysql < FILE.sql 直接载入sql脚本

    交互模式下也能载入脚本:
        mysql>source|\. FILE.sql

mysql的命令模式:
    客户端命令:
        clear(\c) 提前终止语句执行
        status(\s) 显示状态
        delimiter(\d)STRING 设定语句结束符为STRING
        connect (\r)重新连接数据库,并显示连接id号和当前默认数据库
        ego(\G)忽略语句结束符,直接送到服务器执行,而且结果以竖排方式显示。
        go(\g)忽略语句结束符,直接送到服务器执行
        quit(\q)退出
        source (\.) 执行sql脚本
        system(\!)执行shell命令
        warnings(\W)语句执行结束后,若有警告信息则显示
        nowaring(\w) 语句执行结束后,不显示警告信息
        prompt(\R)修改提示符
        rehash(\#) 对于新建的对象,启用名称补全功能

    服务器语句:
        使用语句结束符分号结尾。可以自定义。
        help KEYWORD 获取KEYWORD的帮助信息。


交互模式下的提示符:
    mysql> 可以输入
    -> 语句未结束,可以继续输入
    '> 缺少单引号的后一半
    "> 缺少双引号的后一半
    `> 缺少反引号的后一半
    /*> 缺少多行注释的后一半


启动mysql服务
    #service mysqld start

    或者
    #mysqld_safe &

mysql配置文件:
    配置文件查找顺序:
        /etc/my.cnf -->
        /etc/mysql/my.cnf -->
        $BASEDIR/my.cnf -->
            $BASEDIR为mysql实例的运行目录,一般为安装目录。

        $DATEDIR/my.cnf -- >数据目录下。

        ~/.my.cnf 用户家目录。

        最终配置以最后一个为准,后一个配置文件会覆盖前一个配置文件。

    查看配置文件可使用的参数和默认值:
        #mysqld --help --verbose  

    my.cnf
        集中式配置文件,可以为多个程序提供配置。
        格式:
            [mysql]
            xxxx
            [mysqld]
            xxxx
            [client]
            xxxx


    /etc/my.cnf
        [mysqld]
        port =3306
        socket =/tmp/mysql.sock
        thread_concurrency=8 线程并发量,cpu的个数*2
        datadir=/var/lib/mysql 指定数据位置。


    ~/.my.cnf:
        假设mysql只允许本地账户登陆,用户在登陆时不想输入账号密码,可以使用以下方法:
        #vim ~/.my.cnf
            [client]
            user = 'root'
            password = 'PASSWD'
            host = 'localhost'

    注意:此方法会有安全性隐患,谨慎使用。


mysql无法启动的解决方法:
    mysql会在数据目录DATADIR中生成一个HOSTNAME.err的错误日至文件。

    1.无法启动,也无法找到HOSTNAME.err文件
        数据目录DATADIR指向错误,修改配置文件更正目录。
        #vim /etc/my.cnf
            datadir=DATADIR

    2.此前服务未关闭,端口被占用
       杀死socket文件的所在的进程释放3306端口。
       #ps -aux|grep mysqld
       #kill PID
       
    3.数据初始化失败
        重新执行初始化脚本
        #cd /usr/local/mysql
        #scripts/mysql_install_db --user=mysql --datadir=/sqld/mdata

    4.数据目录权限问题
        #chmod -R mysql:mysql DATADIR