关键词搜索

源码搜索 ×
×

MYSQL: 渐行渐远的开源关系型数据库典范

发布2017-02-23浏览6342次

详情内容

这里写图片描述
多年以前,随着NoSQL等概念的推行,一时间恍惚到了关系型数据库的末日,结果数年过去,Oracle依然老当益壮,一家独大地卖licence挣得盆满钵满。收掉Sun的同时顺手得到了开源关系型数据库王者的MYSQL,从此开始了MYSQL版本的缓慢升级,也给了Mariadb另起炉灶的可乘之机。不管如何,MYSQL还是在当前的应用中占有这一席之地。这篇文章,将会使用容器的方式来简单的入门学习MYQSL的使用方式。

MYSQL的前世今生

年份事件
1995年Michael Widenius, David Axmark和Allan Larsson创立MYSQL AB公司
2008年Michael 以10亿$的价格将MYSQL卖于Sun公司
2010年Oracle买下Sun同时拥有了MySQL

当前最新版本

项目内容
目前最新版本8.0

docker pull

使用Easypack下的alpine的MySQL,当然你也可以直接使用官方镜像,没有区别,只是在Easypack的项目中,整理了一些常用的有Reputation的镜像,为了更好的进行集成和整合,进行了一个收集/整理/自定义的过程。

[root@liumiaocn ~]# docker pull liumiaocn/mysql
Using default tag: latest
Trying to pull repository docker.io/liumiaocn/mysql ...
latest: Pulling from docker.io/liumiaocn/mysql
5040bd298390: Already exists
d380e9ce206d: Pull complete
d2cdbfa8c9e8: Pull complete
3f3b43330ab6: Pull complete
63a2c442cd4c: Pull complete
755b18be0122: Pull complete
d5138eacfabf: Pull complete
e37972099ff1: Pull complete
9f125c251d92: Pull complete
73f300a76ee1: Pull complete
ad6380b5f40b: Pull complete
Digest: sha256:bbf6ece5678975f1558123d32f0122da300dc1729007ff3a576a0eafe89aa4cf
Status: Downloaded newer image for docker.io/liumiaocn/mysql:latest
[root@liumiaocn ~]# docker images |grep mysql
docker.io/liumiaocn/mysql                                latest              bf27235475d1        8 hours ago         431.9 MB
[root@liumiaocn ~]#

    启动镜像

    正常启动一个mysql的镜像, MySQL和她的妹妹Maria在版本5.5之前几乎一模一样,然而渐渐也会有些许的区别出来,镜像的使用上目前MYSQL需要设定MYSQL_ROOT_PASSWORD/MYSQL_ALLOW_EMPTY_PASSWORD/MYSQL_RANDOM_ROOT_PASSWORD才行。如下以指定密码的方式启动镜像,实际的时候可以使用环境变量等至少避免明文的密码。

    [root@liumiaocn ~]# docker run --name mysql -e MYSQL_ROOT_PASSWORD=new123 -d liumiaocn/mysql
    6df4033390f8df4a6631513073318f121460d55ad7b581555a05dd86975cd318
    [root@liumiaocn ~]#
    • 1
    • 2
    • 3

    连接镜像

    [root@liumiaocn ~]# docker exec -it mysql /bin/sh
    # hostname
    6df4033390f8
    # which mysql
    /usr/bin/mysql
    #
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    版本确认

    # mysql --version
    mysql  Ver 14.14 Distrib 8.0.0-dmr, for Linux (x86_64) using  EditLine wrapper
    #
    • 1
    • 2
    • 3

    确认数据库

    # mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 7
    Server version: 8.0.0-dmr MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.04 sec)
    
    mysql>
      21
    • 22
    • 23
    • 24
    • 25
    • 26

    创建数据库

    使用create database test创建名为test的数据库

    mysql> create database test;
    Query OK, 1 row affected (0.04 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    | test               |
    +--------------------+
    5 rows in set (0.00 sec)
    
    mysql>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    连接数据库

    使用use 数据库名 命令去连接所指定的数据库,比如use test,将会连接刚刚创建的test数据库,在连接之后的操作比如创建表,在没有指明数据库名的情况下均对于当前所连接的数据库起作用。

    mysql> use test
    Database changed
    mysql>
    • 1
    • 2
    • 3

    基本操作

    版本确认

    虽然mysql –version也可以确认版本,就像Oracle一样,在连接实例之后才能进行的确认方式,不过没有Oracle那样复杂庞大的系统视图而已。

    mysql> select version();
    +-----------+
    | version() |
    +-----------+
    | 8.0.0-dmr |
    +-----------+
    1 row in set (0.00 sec)
    
    mysql>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    字符串处理

    mysql> select "hello world";
    +-------------+
    | hello world |
    +-------------+
    | hello world |
    +-------------+
    1 row in set (0.00 sec)
    
    mysql>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    简单计算

    类似Oracle里面的select from dual, mysql里面可以直接select

    mysql> select 3*7;
    +-----+
    | 3*7 |
    +-----+
    |  21 |
    +-----+
    1 row in set (0.01 sec)
    
    mysql>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    字符集确认

    使用show variables like 可以查出字符集相关信息

    mysql> show variables like 'char%';
    +--------------------------+----------------------------+
    | Variable_name            | Value                      |
    +--------------------------+----------------------------+
    | character_set_client     | latin1                     |
    | character_set_connection | latin1                     |
    | character_set_database   | utf8                       |
    | character_set_filesystem | binary                     |
    | character_set_results    | latin1                     |
    | character_set_server     | latin1                     |
    | character_set_system     | utf8                       |
    | character_sets_dir       | /usr/share/mysql/charsets/ |
    +--------------------------+----------------------------+
    8 rows in set (0.00 sec)
    
    mysql>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    字符显示确认

    关于中文乱码一般有两种情况需要确认,终端的设定与mysql的设定。显示的时候需要设定character_set_results,如果不能正确显示可以参考如下设定试一下

    mysql> set character_set_results='utf8';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 
    • 1
    • 2
    • 3
    • 4

    字符集导入乱码对应

    诸如中文字符导入可能会引起各种问题,在数据导入之前可以使用set names解决此类问题,比如如下方式

    mysql> set names utf8;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 
    • 1
    • 2
    • 3
    • 4

    数据导入时外键依赖

    因为外键的依赖,导致初期导入数据的时候需要确认先后顺序,在确保数据没有问题的情况下,可以像如下方法可以将外键检查临时关闭,真正在实施的时候再打开也行。

    mysql> set FOREIGN_KEY_CHECKS=0;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> 
    • 1
    • 2
    • 3
    • 4

    mysqldump使用

    使用mysqldump可以进行数据库的数据和结构的导出,使用方式如下。

    数据库结构导出

    使用如下方式可以将数据库建表语句和insert数据的sql一起导出

    mysqldump -u用户名 -p密码 >/tmp/all-database.sql
    • 1

    数据库导出

    使用如下方式可以仅仅导出数据库建表语句。

    mysqldump -u用户名 -p密码 -d 数据库名 >/tmp/database-structure.sql
    • 1

    数据导入

    使用如下方式可以导入数据

    mysql -u用户名 -p密码 -e "use 数据库名; source /tmp/all-database.sql"
    • 1

    环境变量

    • MYSQL_ROOT_PASSWORD
    • MYSQL_DATABASE
    • MYSQL_USER
    • MYSQL_PASSWORD
    • MYSQL_ALLOW_EMPTY_PASSWORD
    • MYSQL_RANDOM_ROOT_PASSWORD
    • MYSQL_ONETIME_PASSWORD

    总结

    抛开当时商业收购被带来的影响,MYSQL曾经以及现在仍在在开源的关系型数据库中占据着非常重要的地位。即使可能的闭源大体也不会给这款已经深入人心的产品蒙上阴影,因为她的妹妹Maria已经稳扎稳打的立足进入了开源的领域。详细请参看狗血故事的续篇:”MariaDB: 谁是更为正宗的MYSQL”.

    相关技术文章

    点击QQ咨询
    开通会员
    返回顶部
    ×
    微信扫码支付
    微信扫码支付
    确定支付下载
    请使用微信描二维码支付
    ×

    提示信息

    ×

    选择支付方式

    • 微信支付
    • 支付宝付款
    确定支付下载