zoukankan      html  css  js  c++  java
  • MySQL简介及安装v0.1

    关系型数据库:

    1、  以行和列的二维表格来表示的。

    2、  通过结构化查询语句(SQL语句)查询的数据库。

    3、  关系型数据库的代表作Oracle和MySQL

    非关系型数据库:不仅仅是关系型数据库,对关系型数据库的补充。

    WEB2.0时代:以用户为主体(大量的读写,高并发,数据一致性)

    Memcached:

        纯内存的,特点快,数据会丢失。新浪基于memcached开发了一个开源的项目Mencachedb,通过为memcached增加Berkeley DB的持久化存储机制和异步复制机制,使Mencached具备事务恢复、持久化存储能力和分布式复制能力。

    Redis:

        数据存储在内存,定时刷新到磁盘上。

    MongoDB:

        基于关系型和非关系型之间的数据库。

    MySQL数据库发布版本介绍:

        Alpha版

        一般内部运行,不对外公开。主要是开发者自己对产品进行测试,检查产品是否存在缺陷、错误等

        Beta

        一般是完成功能开发和所有测试工作之后的产品,不会存在较大的功能或性能的BUG。并且邀请或者提供给用户进行体验与测试,以便更全面的测试软件的不足之处或存在的问题

        RC

        属于生产环境发布之前的一个小版本或称之为候选版,是根据beta版测试结果收集到的BUG和缺陷进行修复和完善后的一个版本。

        GA

        软件正式发布的产品,一般情况,企业生产环境都会选择GA版。

    MySQL产品三条路线

    第一条5.0.xx到5.1.xx

        5.0.xx升级到5.1.xx的产品系列,继续完善与改进其用户体验与性能,同时增加新功能,是MySQL早期产品的延续系列。

    第二条5.4.xx到5.7.xx

        更好的整合了MySQL AB公司社区和第三方公司开发的新存储引擎,以及吸收新的实现算法,从而更好的支持SMP架构,提高了性能而且做了大量的代码重构。目前稳定版本是:MySQL5.5:latest general availability(production)release也是使用最多的版本。

    第三条6.0.xx到7.1.xx

        为了更好地推广MySQL Cluster(MySQL集群,类似于Oracle RAC)版本,以及提高MySQL cluster的性能和稳定性对产品改进和增加,改动MySQL基础功能,使其对cluster存储引擎提供更有效的支持与优化。

    版本命名介绍:

    例如:mysql-5.0.56.tar.gz

    第一个数字5表示主版本号

    第二个数字0表示发行级别,主版本号加发行级别组合一起构成了发行序列号。

    第三个数字56是在此发行系列的版本号。默认不加说明的是GA版。

    编译安装MySQL

    源码包如下:

    mysql-5.5.32.tar.gz和cmake-2.8.8.tar.gz

    社区版官方下载地址https://downloads.mysql.com/archives/community/

    安装环境准备:

    yum install -y gcc gcc-c++

    yum install -y ncurses-devel

    tar -zxf cmake-2.8.8.tar.gz

    cd cmake-2.8.8

    ./configure

    gmake

    gmake install

    groupadd mysql

    useradd -s /sbin/nologin -M -g mysql mysql

    mkdir /application

     

    编译安装:

    tar -zxf mysql-5.5.32.tar.gz

    cd mysql-5.5.32

    cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32/

    -DMYSQL_DATADIR=/application/mysql-5.5.32/data

    -DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/tmp/mysql.sock

    -DDEFAULT_CHARSET=utf8

    -DDEFAULT_COLLATION=utf8_general_ci

    -DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii

    -DENABLED_LOCAL_INFILE=NO

    -DWITH_INNOBASE_STORAGE_ENGINE=1

    -DWITH_FEDERATED_STORAGE_ENGINE=1

    -DWITH_BLACKHOLE_STORAGE_ENGINE=1

    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1

    -DWITHOUT_PARTITION_STORAGE_ENGINE=1

    -DWITH_FAST_MUTEXES=1

    -DWITH_ZLIB=bundled

    -DENABLED_LOCAL_INFILE=1

    -DWITH_READLINE=1

    -DWITH_EMBEDDED_SERVER=1

    -DWITH_DEBUG=0

    make && make install

    MySQL初始化及环境变量配置:

    ln -s /application/mysql-5.5.32/ /application/mysql

    cp tools/mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf

    echo 'export PATH=/application/mysql/bin:$PATH' >> /etc/profile

    source /etc/profile

    chown -R mysql.mysql /application/mysql/data/

    chmod -R 1777 /tmp

    /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql

    cp tools/mysql-5.5.32/support-files/mysql.server /etc/init.d/mysqld

    chmod +x /etc/init.d/mysqld

    /etc/init.d/mysqld start

    chkconfig mysqld on

    netstat -antp | grep 3306

     

    初始优化数据库

    mysql 登陆数据库

    drop database test;  删除多余的库

    delete form mysql.user where user='';  删除多余的用户

    delete from mysql.user where host!='localhost' or host!='127.0.0.1'; 删除非本地用户

    delete from mysql.user;  或者删除所有用户,创建一个新的管理员。

    grant all privileges on *.* to system@'localhost' identified by '123456' with grant option;   参数(with grant option)表示可以授权用户,真正跟root用户权限一致。

    flush privileges; 刷新权限列表

     

     


     

    MySQL多实例

    MySQL多实例介绍:

        一台服务器上开启多个不同的服务端口(如:3306、3307),运行多个MySQL服务进程。这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。这些MySQL多实例共用一套MySQL安装程序,使用不通(也可以相同)的my.cnf配置文件、启动程序、数据文件。多实例MySQL在逻辑上来看是各自独立的,多个实例的自身是根据配置文件对应的设定值,来取得服务器的相关硬件资源的多少。

    多实例配置方案:

    安装MySQL

    make && make install

    ln -s /application/mysql-5.5.32/ /application/mysql

    echo 'export PATH=/application/mysql/bin:$PATH' >> /etc/profile

    source /etc/profile

    mkdir -p /data/{3307,3308}/data

    创建配置文件

    /data/3307/my.cnf

    /data/3308/my.cnf

    [client]

    port    = 3307

    socket  = /data/3307/mysql.sock

    [mysql]

    no-auto-rehash

    [mysqld]

    user    = mysql

    port    = 3307

    socket  = /data/3307/mysql.sock

    basedir = /application/mysql

    datadir = /data/3307/data

    open_files_limit    = 1024

    back_log    = 600

    max_connections = 800

    max_connect_errors  = 3000

    table_cache = 614

    external-locking    = FALSE

    max_allowed_packet  = 8M

    sort_buffer_size    = 1M

    join_buffer_size    = 1M

    thread_concurrency  = 2

    query_cache_size    = 2M

    query_cache_limit   = 1M

    query_cache_min_res_unit= 2k

    #default_table_type = InnoDB

    thread_stack    = 192K

    transaction_isolation   = READ-COMMITTED

    tmp_table_size  = 2M

    max_heap_table_size = 2M

    long_query_time = 1

    #log_long_format

    log-error = /data/3307/error.log

    log-slow-queries = /data/3307/slow.log

    pid-file = /data/3307/mysql.pid

    log-bin = /data/3307/mysql-bin

    relay-log = /data/3307/relay-bin

    relay-log-info-file = /data/3307/relay-log.info

    binlog_cache_size   = 1M

    max_binlog_cache_size   = 1M

    max_binlog_size     = 2M

    expire_logs_days    = 7

    key_buffer_size = 16M

    read_buffer_size= 1M

    read_rnd_buffer_size    = 1M

    bulk_insert_buffer_size = 1M

    myisam_sort_buffer_size = 1M

    myisam_max_sort_file_size = 10G

    #myisam_max_extra_sort_file_size = 10G

    myisam_repair_threads   = 1

    myisam_recover

    lower_case_table_names  = 1

    skip-name-resolve

    slave-skip-errors   = 1032,1062

    replicate-ignore-db = mysql

    server-id = 1

    innodb_additional_mem_pool_size = 4M

    innodb_buffer_pool_size = 32M

    innodb_data_file_path   = ibdata1:128M:autoextend

    innodb_file_io_threads  = 4

    innodb_thread_concurrency = 8

    innodb_flush_log_at_trx_commit  = 2

    innodb_log_buffer_size  = 2M

    innodb_log_file_size    = 4M

    innodb_log_files_in_group = 3

    innodb_max_dirty_pages_pct = 90

    innodb_lock_wait_timeout = 120

    innodb_file_per_table   = 0

    [mysqldump]

    quick

    max_allowed_packet = 2M

    [mysqld_safe]

    log-error=/data/3307/mysql_3307_err.log

    pid-file=/data/3307/mysqld.pid

     

    [client]

    port    = 3308

    socket  = /data/3308/mysql.sock

    [mysql]

    no-auto-rehash

    [mysqld]

    user    = mysql

    port    = 3308

    socket  = /data/3308/mysql.sock

    basedir = /application/mysql

    datadir = /data/3308/data

    open_files_limit    = 1024

    back_log    = 600

    max_connections = 800

    max_connect_errors  = 3000

    table_cache = 614

    external-locking    = FALSE

    max_allowed_packet  = 8M

    sort_buffer_size    = 1M

    join_buffer_size    = 1M

    thread_concurrency  = 2

    query_cache_size    = 2M

    query_cache_limit   = 1M

    query_cache_min_res_unit= 2k

    #default_table_type = InnoDB

    thread_stack    = 192K

    transaction_isolation   = READ-COMMITTED

    tmp_table_size  = 2M

    max_heap_table_size = 2M

    long_query_time = 1

    #log_long_format

    log-error = /data/3308/error.log

    log-slow-queries = /data/3308/slow.log

    pid-file = /data/3308/mysql.pid

    log-bin = /data/3308/mysql-bin

    relay-log = /data/3308/relay-bin

    relay-log-info-file = /data/3308/relay-log.info

    binlog_cache_size   = 1M

    max_binlog_cache_size   = 1M

    max_binlog_size     = 2M

    expire_logs_days    = 7

    key_buffer_size = 16M

    read_buffer_size= 1M

    read_rnd_buffer_size    = 1M

    bulk_insert_buffer_size = 1M

    myisam_sort_buffer_size = 1M

    myisam_max_sort_file_size = 10G

    #myisam_max_extra_sort_file_size = 10G

    myisam_repair_threads   = 1

    myisam_recover

    lower_case_table_names  = 1

    skip-name-resolve

    slave-skip-errors   = 1032,1062

    replicate-ignore-db = mysql

    server-id = 1

    innodb_additional_mem_pool_size = 4M

    innodb_buffer_pool_size = 32M

    innodb_data_file_path   = ibdata1:128M:autoextend

    innodb_file_io_threads  = 4

    innodb_thread_concurrency = 8

    innodb_flush_log_at_trx_commit  = 2

    innodb_log_buffer_size  = 2M

    innodb_log_file_size    = 4M

    innodb_log_files_in_group = 3

    innodb_max_dirty_pages_pct = 90

    innodb_lock_wait_timeout = 120

    innodb_file_per_table   = 0

    [mysqldump]

    quick

    max_allowed_packet = 2M

    [mysqld_safe]

    log-error=/data/3308/mysql_3308_err.log

    pid-file=/data/3308/mysqld.pid

     

    注:上述配置文件有三个选项被注释,不注释启动时报没有此选项错误。不知道为什么。

    最后tree的结果如下:

    /data

    ├── 3307

    │   ├── data

    │   ├── my.cnf

    └── 3308

        ├── data

        └── my.cnf

    初始化数据库实例:(以3307实例为例)

    /application/mysql/scripts/mysql_install_db  --basedir=/application/mysql --datadir=/data/3307/data/ --user=mysql   

    手动启动和关闭数据库实例:

        启动数据库实例

        /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &  

        平滑关闭数据库实例

        mysqladmin -uroot password '123456' -S /data/3307/mysql.sock shutdown

    自动启动脚本:

    #!/bin/sh

    #Nick Suo

    #email:630571017@qq.com

    #blog:http://www.cnblogs.com/suoning

     

    #init

    port=3307

    mysql_user="root"

    mysql_pwd="123456"

    CmdPath="/application/mysql/bin"

    mysql_sock="/data/${port}/mysql.sock"

    #startup function

    function_start_mysql()

    {

        if [ ! -e "$mysql_sock" ];then

          printf "Starting MySQL... "

          /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &

        else

          printf "MySQL is running... "

          exit

        fi

    }

     

    #stop function

    function_stop_mysql()

    {

        if [ ! -e "$mysql_sock" ];then

           printf "MySQL is stopped... "

           exit

        else

           printf "Stoping MySQL... "

           ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown

       fi

    }

     

    #restart function

    function_restart_mysql()

    {

        printf "Restarting MySQL... "

        function_stop_mysql

        sleep 2

        function_start_mysql

    }

     

    case $1 in

    start)

        function_start_mysql

    ;;

    stop)

        function_stop_mysql

    ;;

    restart)

        function_restart_mysql

    ;;

    *)

        printf "Usage: /data/${port}/mysql {start|stop|restart} "

    esac

    注:由于关闭数据库实例需要输入密码所以要将改过的密码在脚本里更改一下。指定密码的参数:mysql_pwd="123456"

    登陆数据库实例:

    mysql -uroot -p123456 -S /data/3307/mysql.sock

    注:多实例情况下,任何操作都要需要通过-S指定socker。MySQL下system命令可以跳出MySQL执行在系统环境下的命令

    如果启动失败,就查看日志文件。

     

    MySQL使用

    help帮助

        查看MySQL内置命令使用方法,及参数选项。例如查看grant如何让使用

        使用实例:mysql> help grant

    更改密码:

        初始设置密码:mysqladmin -uroot password "qixiao"

        已有密码在系统环境下更改密码:mysqladmin -uroot password "qixiao" -p123456

        已有密码在sql里使用update更改密码:

    mysql> update mysql.user set password=password(123456) where user="root" and host="localhost" ;

    mysql> flush privileges;  刷新权限列表

        忘记密码情况下通过跳过权限列表更改密码:

    /etc/init.d/mysqld stop     #关闭服务器

    /usr/bin/mysqld_safe --skip-grant-tables --user=mysql &

    使用mysqld_safe加--skip-grant-tables跳过安全权限列表启动。

    mysql   直接登陆

    通过update更改密码

        多实例忘记密码

    mysqladmin -uroot -p123456 -S /data/3307/mysql.sock  shutdown  关闭实例

    /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables --user=mysql &  指定配置文件跳过权限列表登陆

    mysql -S /data/3307/mysql.sock   指定socket直接登陆

    通过update更改密码

    刷新权限列表

    常用操作:

    mysql> show databases like '%xia%';   查找数据库,模糊查找

    mysql> use qixiao;         选择数据库

    mysql> select database();  显示当前数据库

    mysql> select user();      显示当前用户

    mysql> select now();       显示当前事件

    mysql> drop user 'qixiao'@'localhost';  删除多余用户(当主机名是大写的时候删不掉,可以用delete删除)

    mysql> delete from mysql.user where user='' and host='XYDC-63'; 删除。

    mysql> flush privileges;   处理完用户最好刷新一下权限。

    mysql> show grants for qixiao@localhost;  查看用户权限

    mysql> revoke insert on *.* from 'admin'@'localhost';  回收权限

    授权用户:

    mysql> grant all privileges on *.* to qixiao@localhost identified by '123456';

    grant

    all privileges

    on *.*

    to qixiao@localhost

    identified by '123456';

    授权命令

    对应权限

    目标:库和表

    用户名和客户端主机

    用户密码

    客户端主机网段匹配:10.0.0.0/255.255.255.0或者10.0.0.%   授权一个网段。

    查询所有权限:

    [root@XYDC-64 ~]# mysql -uroot -p123456 -e "show grants for admin@localhost;"|grep -i grant |tail -1|tr ',' ' ' > privileges.txt

    -e表示在不登陆进去的情况下执行SQL语句。tr 表示将逗号替换成换行。

    授权权限:

        ALL PRIVILEGES:所有权限

    SELECT

    UPDATE

    DELETE

    CREATE

    DROP

    RELOAD

    SHUTDOWN

    PROCESS

    FILE

    REFERENCES

    INDEX

    ALTER

    SHOW DATABASES

    SUPER

    查询

    更改

    删除数据

    创建

    删除表

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    JUnit测试框架的简单使用
    [转载文章] 单元测试与单元测试框架
    [转载文章]单元测试基本准则
    [转载文章]Google的Java编程风格指南(Java编码规范)
    设计模式实战——开发中经常涉及到的建造者模式
    痞子衡嵌入式:ARM Cortex-M文件那些事(7)- 反汇编文件(.s/.lst/.dump)
    痞子衡嵌入式:ARM Cortex-M文件那些事(6)- 可执行文件(.out/.elf)
    痞子衡嵌入式:ARM Cortex-M文件那些事(5)- 映射文件(.map)
    痞子衡嵌入式:ARM Cortex-M文件那些事(4)- 可重定向文件(.o/.a)
    痞子衡嵌入式:ARM Cortex-M文件那些事(3)- 工程文件(.ewp)
  • 原文地址:https://www.cnblogs.com/lingshu/p/11338407.html
Copyright © 2011-2022 走看看