• mysql数据库学习(一)--基础


    一、简介

    MySQL是一个关系型数据库管理系统由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。

    • MySQL是一种数据库管理系统。
    • MySQL是一种关联数据库管理系统。
    • MySQL软件是一种开放源码软件。
    • MySQL数据库服务器具有快速、可靠和易于使用的特点。
    • MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。
    • 有大量可用的共享MySQL软件。

    MySQL表最大能达到多少?

    InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。

    二、安装数据库

    下载MySQL地址:http://dev.mysql.com/downloads/mysql/

    1.安装操作

    1.yum安装,这个比较简单,可以将需要的包都给直接安装好---推荐使用

    yum install mysql-server

    2.ubuntu安装,一般生产环境使用比较少

    1. sudo apt-get install mysql-server
    2. sudo apt-get isntall mysql-client
    3. sudo apt-get install libmysqlclient-dev
    
    # 检测是否安装成功(是否为LISTEN状态)
    sudo netstat -tap | grep mysql

    3.编译安装,较为复杂,依赖较多

    # 安装依赖包
    yum install ncurses-devel gcc gcc-c++ -y
    
    # 创建目录
    mkdir -p /home/oldsuo/tools
    
    # 安装cmake软件,gmake编译安装
    cd /home/oldsuo/tools/
    tar xf cmake-2.8.8.tar.gz
    cd cmake-2.8.8
    ./configure
    #CMake has bootstrapped.  Now run gmake.
    gmake
    gmake install
    cd ../
    
    
    # 开始安装mysql
    # 创建用户和组
    groupadd mysql
    useradd mysql -s /sbin/nologin -M -g mysql
    
    # 解压编译MySQL
    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=ON 
    -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
    
    #-- Build files have been written to: /home/oldsuo/tools/mysql-5.5.32
    提示: 编译时可配置的选项很多,具体可参考结尾附录或官方文档:
    
    make
    #[100%] Built target my_safe_process
    make install
    ln -s /application/mysql-5.5.32/ /application/mysql
    如果上述操作未出现错误,则MySQL5.5.32软件cmake方式的安装就算成功了。
    
    
    #拷贝配置文件
    cp mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf
    
    #添加变量,并使之生效
    echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
    source /etc/profile
    echo $PATH
    
    #授权用户及/tmp/临时文件目录
    chown -R mysql.mysql /application/mysql/data/
    chmod -R 1777 /tmp/
    
    #初始化数据库
    cd /application/mysql/scripts/
    ./mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql
    cd ../
    
    #启动数据库
    cp support-files/mysql.server /etc/init.d/mysqld
    chmod +x /etc/init.d/mysqld
    /etc/init.d/mysqld  start
    
    #检查端口
    netstat -lntup|grep 3306

    2.安装后操作

     1、删除不必要的用户和库:

    #查看用户和主机列,从mysql.user里查看
    select user,host from mysql.user;
    
    #删除用户名为空的库,并检查
    delete from mysql.user where user='';
    select user,host from mysql.user;
    
    #删除主机名为localhost.localdomain的库,并检查
    delete from mysql.user where host='localhost.localdomain';
    select user,host from mysql.user;
    
    #删除主机名为::1的库,并检查。::1库的作用为IPV6
    delete from mysql.user where host='::1';
    
    #删除test库
    drop database test;

    2、添加额外管理员:

    # 添加额外管理员,system作为管理员,123456为密码
    mysql> delete from mysql.user;
    Query OK, 2 rows affected (0.00 sec)
    mysql> grant all privileges on *.* to system@'localhost' identified by '123456' with grant option;
    Query OK, 0 rows affected (0.00 sec)
    # 刷新MySQL的系统权限相关表,使配置生效
    mysql> flush privileges;
    Query OK, 0 rows affected (0.00 sec)
    mysql> select user,host from mysql.user;
    +--------+-----------+
    | user   | host      |
    +--------+-----------+
    | system | localhost |
    +--------+-----------+
    1 row in set (0.00 sec)
    mysql>

    3、设置登录密码并开机自启:

    #设置密码,并登陆
    /usr/local/mysql/bin/mysqladmin -u root password 'oldsuo'
    mysql -usystem -p
    
    #开机启动mysqld,并检查
    chkconfig mysqld on
    chkconfig --list mysqld

    三、字符集

    1.字符集简介

    字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。简单的说,字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集ASC2,MySQL数据库字符集包括字符集和校对规则两个概念,字符集是定义数据库里面的内容字符串的存储方式,而校对规则是定义比较字符串的方式。

    建议:中英文环境选择utf8

    2、查看设置字符集

    # 查看MySQL字符集设置情况
    show variables like 'character_set%';
    # 查看库的字符集
    show create database db;
    # 查看表的字符集
    show create table db_tbG
    # 查询所有
    show collation;
    
    # 设置表的字符集
    set tables utf8;

    3、MySQL数据乱码及解决方法

    1>    系统方面
    cat /etc/sysconfig/i18n 
    LANG="zh_CN.UTF-8"
    
    2>    客户端(程序),调整字符集为latin1。
    mysql> set names latin1;        #临时生效
    Query OK, 0 rows affected (0.00 sec)
        #更改my.cnf客户端模块的参数,实现set name latin1 的效果,并且永久生效。
        [client]
    default-character-set=latin1
    #无需重启服务,退出登录就生效,相当于set name latin1。
    
    3>    服务端,更改my.cnf参数
    [mysqld]
    default-character-set=latin1        #适合5.1及以前版本
    character-set-server=latin1         #适合5.5
    
    4>    库、表、程序
    #建表指定utf8字符集
    mysql> create database nick_defailtsss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
    Query OK, 1 row affected (0.00 sec)

    4、将utf8字符集修改成GBK字符集的实际过程

    1>    导出表结构
    #以utf8格式导出
    mysqldump -uroot -p --default-character-set=utf8 -d nick_defailt>alltable.sql
    --default-character-set=gbk        #表示已GBK字符集连接 –d 只表示表结构
    
    2>    编辑alltable.sql 将utf8改成gbk。
    
    3>    确保数据库不在更新,导出所有数据
    mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 nick_defailt>alldata.sql
    
    4>    打开alldata.sql将set name utf8 修改成 set names gbk(或者修改系统的服务端和客户端)
    
    5>    建库
    create database oldsuo default charset gbk;
    
    6>    创建表,执行alltable.sql
    mysql -uroot -p oldsuo <alltable.sql
    
    7>    导入数据
    mysql -uroot -p oldsuo <alltable.sql

    四、存储引擎

    MySQL最常用存储引擎Myisam和Innodb。mysql 5.5.5以后默认存储引擎为Innodb。

    MySQL的每种引擎在MySQL里是通过插件的方式使用的,MySQL可以支持多种存储引擎。

    建议:使用 Innodb引擎,因为支持回滚。

    1.引擎对应系统文件

    1)    MyISAM引擎系统库表对应文件
    [root@mysql 3306]# ll /data/3306/data/mysql/
    -rw-rw----. 1 mysql mysql  10630 10月 31 16:05 user.frm            #保存表的定义
    -rw-rw----. 1 mysql mysql   1140 10月 31 18:40 user.MYD            #数据文件
    -rw-rw----. 1 mysql mysql   2048 10月 31 18:40 user.MYI            #索引文件
    
    [root@mysql 3306]# file data/mysql/user.frm 
    data/mysql/user.frm: MySQL table definition file Version 9
    [root@mysql 3306]# file data/mysql/user.MYD 
    data/mysql/user.MYD: DBase 3 data file (167514107 records)
    [root@mysql 3306]# file data/mysql/user.MYI
    data/mysql/user.MYI: MySQL MISAM compressed data file Version 1
    
    2)    InnoDB引擎
    
    [root@mysql 3306]# ll data/
    -rw-rw----. 1 mysql mysql 134217728 10月 31 20:05 ibdata1

    2.修改引擎

    创建后引擎的修改
    语法:    ALTER TABLE student ENGINE = INNODB;
             ALTER TABLE student ENGINE = MyISAM;

    3、建表指定引擎

    mysql> create table mess (                  
        -> id int(4) not null,                 
        -> name char(20) not null,
        -> age tinyint(2) NOT NULL default '0',
        -> dept varchar(16) default NULL
        -> ) ENGINE=MyISAM CHARSET=utf8;
    Query OK, 0 rows affected (0.00 sec)

    五、基本操作

    学习如何管理和导航MySQL数据库和表是要掌握的首要任务之一,下面的内容将主要对MySQL的数据库和表的一些常用命令进行总结,一些我们不得不掌握的命令,一些信手拈来的命令。

    1.数据操作

    运行相关:

    1、    单实例mysql启动
    [root@localhost ~]# /etc/init.d/mysqld start
    Starting MySQL                                             [确定]
    #mysqld_safe –user=mysql &
    
    2、    查看MySQL端口
    [root@localhost ~]# ss -lntup|grep 3306
    tcp    LISTEN     0      50                     *:3306                  *:*      users:(("mysqld",19651,10))
    
    3、    查看MySQL进程
    [root@localhost ~]# ps -ef|grep mysql|grep -v grep
    root     19543     1  0 Oct10 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
    mysql    19651 19543  0 Oct10 ?        00:05:04 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --log-error=/usr/local/mysql/data/localhost.localdomain.err --pid-file=/usr/local/mysql/data/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306
    
    4、    MySQL启动原理
    /etc/init.d/mysqld 是一个shell启动脚本,启动后最终会调用mysqld_safe脚本,最后调用mysqld服务启动mysql。
            "$manager" 
            --mysqld-safe-compatible 
            --user="$user" 
            --pid-file="$pid_file" >/dev/null 2>&1 &
    
    5、关闭数据库
    [root@localhost ~]# /etc/init.d/mysqld stop
    Shutting down MySQL....                                    [确定]
    
    6、    查看mysql数据库里操作命令历史
    cat /root/.mysql_history
    
    7、    强制linux不记录敏感历史命令
    HISTCONTROL=ignorespace
    
    8、    mysql设置密码
    /usr/local/mysql/bin/mysqladmin -u root password 'oldsuo'
    
    9、    mysql修改密码,与多实例指定sock修改密码
    mysqladmin -uroot -passwd password 'oldsuo'
    mysqladmin -uroot -passwd password 'oldsuo' -S /data/3306/mysql.sock

    操作相关:

    1.查看当前版本

    select version();

    2.查看当前用户

    select user();

    3.显示数据库

    show databases;

    默认数据库:

      mysql - 用户权限相关数据
      test - 用于用户测试数据
      information_schema - MySQL本身架构相关数据

    4.创建数据

    # utf-8
    CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
     
    # gbk
    CREATE DATABASE 数据库名称 DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

    5.使用数据库

    use db_name

    6.查看当前数据表

    show tables;

    7.用户管理

    创建用户
        create user '用户名'@'IP地址' identified by '密码';
    删除用户
        drop user '用户名'@'IP地址';
    修改用户
        rename user '用户名'@'IP地址'; to '新用户名'@'IP地址';;
    修改密码
        set password for '用户名'@'IP地址' = Password('新密码')
      
    PS:用户权限相关数据保存在mysql数据库的user表中,所以也可以直接对其进行操作(不建议)

    8.授权管理

    show grants for '用户'@'IP地址'                  -- 查看权限
    grant  权限 on 数据库.表 to   '用户'@'IP地址'      -- 授权
    revoke 权限 on 数据库.表 from '用户'@'IP地址'      -- 取消权限
    all privileges  除grant外的所有权限
                select          仅查权限
                select,insert   查和插入权限
                ...
                usage                   无访问权限
                alter                   使用alter table
                alter routine           使用alter procedure和drop procedure
                create                  使用create table
                create routine          使用create procedure
                create temporary tables 使用create temporary tables
                create user             使用create userdrop user、rename user和revoke  all privileges
                create view             使用create view
                delete                  使用delete
                drop                    使用drop table
                execute                 使用call和存储过程
                file                    使用select into outfile 和 load data infile
                grant option            使用grant 和 revoke
                index                   使用index
                insert                  使用insert
                lock tables             使用lock table
                process                 使用show full processlist
                select                  使用select
                show databases          使用show databases
                show view               使用show view
                update                  使用update
                reload                  使用flush
                shutdown                使用mysqladmin shutdown(关闭MySQL)
                super                       使用change master、kill、logs、purge、master和set global。还允许mysqladmin调试登陆
                replication client      服务器位置的访问
                replication slave       由复制从属使用
    
    对于权限
    关于权限
            对于目标数据库以及内部其他:
                数据库名.*           数据库中的所有
                数据库名.表          指定数据库中的某张表
                数据库名.存储过程     指定数据库中的存储过程
                *.*                所有数据库
    关于数据库
                用户名@IP地址         用户只能在改IP下才能访问
                用户名@192.168.1.%   用户只能在改IP段下才能访问(通配符%表示任意)
                用户名@%             用户可以再任意IP下访问(默认IP地址为%)
    关于用户
                grant all privileges on db1.tb1 TO '用户名'@'IP'
    
                grant select on db1.* TO '用户名'@'IP'
    
                grant select,insert on *.* TO '用户名'@'IP'
    
                revoke select on db1.tb1 from '用户名'@'IP'
    实例

    6.破解Mysql登录密码

    1> 普通方式
    #> service mysqld stop
    #>mysqld_safe --skip-grant-tables &
    输入 mysql -uroot -p 回车进入
    >use mysql;
    > update user set password=PASSWORD("newpass")where user="root";
    更改密码为 newpassord
    > flush privileges; 更新权限
    > quit 退出
    service mysqld restart
    mysql -uroot -p新密码进入
    
    2> 普通方式的简写
    service mysqld stop
    mysqld_safe --skip-grant-tables --user=mysql &
    mysql
    update mysql.user set password=PASSWORD("newpass")where user="root" and host='localhost';
    flush privileges;
    mysqladmin -uroot -pnewpass shutdown
    /etc/init.d/mysqld start
    mysql -uroot -pnewpass        #登陆
    
    3>多实例方式
    killall mysqld
    mysqld_safe –defaults-file=/data/3306/my.cnf –skip-grant-table &
    mysql –u root –p –S /data/3306/mysql.sock        #指定sock登陆
    update mysql.user set password=PASSWORD("newpass")where user="root";
    flush privileges;
    mysqladmin -uroot -pnewpass shutdown
    /etc/init.d/mysqld start
    mysql -uroot -pnewpass        #登陆

    参考文章:http://www.cnblogs.com/wupeiqi/articles/5713315.html

    参考文章:http://www.cnblogs.com/suoning/p/5742885.html

  • 相关阅读:
    结对项目——四则运算
    关于结对编程的感想
    《诗词大闯关》调查表与调查结果分析
    我的软件工程课目标
    我的软件工程课目标
    软件工程课程建议
    结对编程(二)
    结对编程——四则运算
    结对编程
    《诗词大闯关》问卷调查心得与体会
  • 原文地址:https://www.cnblogs.com/chushiyaoyue/p/5913406.html
Copyright © 2020-2023  润新知