多年以前,随着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 ~]#

连接镜像

[root@liumiaocn ~]# docker exec -it mysql /bin/sh
# hostname
6df4033390f8
# which mysql
/usr/bin/mysql
#

版本确认

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

确认数据库

# 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>

创建数据库

使用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>

连接数据库

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

mysql> use test
Database changed
mysql>

基本操作

版本确认

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

mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.0-dmr |
+-----------+
1 row in set (0.00 sec)mysql>

字符串处理

mysql> select "hello world";
+-------------+
| hello world |
+-------------+
| hello world |
+-------------+
1 row in set (0.00 sec)mysql>

简单计算

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

mysql> select 3*7;
+-----+
| 3*7 |
+-----+
|  21 |
+-----+
1 row in set (0.01 sec)mysql>

字符集确认

使用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>

字符显示确认

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

mysql> set character_set_results='utf8';
Query OK, 0 rows affected (0.00 sec)mysql> 

字符集导入乱码对应

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

mysql> set names utf8;
Query OK, 0 rows affected (0.00 sec)mysql> 

数据导入时外键依赖

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

mysql> set FOREIGN_KEY_CHECKS=0;
Query OK, 0 rows affected (0.00 sec)mysql> 

mysqldump使用

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

数据库结构导出

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

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

数据库导出

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

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

数据导入

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

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

环境变量

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

总结

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

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

  1. 三款开源关系型数据库对比:MySQL、PostgreSQL、SQLite

    在这篇DigitalOcean文章中,我们将尝试理解一些最常用.最流行的关系型数据库管理系统(RDBMS)的内核区别.我们将会探索最底层的区别--特性与功能,它们如何工作,在哪方面更出色,以帮助程序员 ...

  2. YugaByte DB 分布式 开源 关系型数据库介绍

    YugaByte DB 分布式 开源 关系型数据库介绍 什么是YugaByte DB? YugaByte DB是一个高性能的分布式SQL数据库,用于为全球互联网规模的应用程序提供支持.YugaByte ...

  3. 开源关系型数据库架构

    前言 我们把主要的开源关系型数据库分为三类,来分别了解一下它们的架构和设计,并了解一下它们各自的优缺点. OLTP,在线事务处理,是传统的关系型数据库的主要应用场景 OLAP,在线分析处理,是当今大数 ...

  4. 纯java数据库_HSQLDB(Hypersonic SQL),纯Java开发的开源关系型数据库

    HSQLDB(Hypersonic SQL)是纯Java开发的关系型数据库,提供了一个小型的,快速多线程的,支持事务的内存型数据库,也支持基于硬盘的表模型,并支持内嵌和服务器模式.它提供JDBC驱动存 ...

  5. MySQL列举常见的关系型数据库和非关系型都有那些?

    关系型数据库: Oracle.DB2.Microsoft SQL Server.Microsoft Access.MySQL 非关系型数据库: NoSql.Cloudant.MongoDb.redis ...

  6. postgresql 自定义表变量_Oracle GoldenGate新支持开源关系型数据库PostgreSQL

    PostgreSQL是一款免费的对象-关系型数据库(ORDBMS),PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询.外键.触发器.视图.事务完整性.多版本并发控制等. ...

  7. MySQL中什么是关系型数据库???

    > 数据库的分类: 数据库是按数据的保存方式以及其构造可以分为四种:层次型数据库.网络型数据库.对象数据库和关系型数据库 > 关系型数据库: 所谓关系型数据库,就是关联的一系列数据都是以表 ...

  8. 阿里云rds升级mysql8_为更强大而生的开源关系型数据库来了!阿里云RDS for MySQL 8.0 正式上线!...

    2019年5月29日15时,阿里云RDS for MySQL 8.0正式上线,使得阿里云成为紧跟社区步伐,发布MySQL最新版本的云厂商.RDS for MySQL 8.0 产品是阿里云推出的 MyS ...

  9. mySQL(关系型数据库管理系统)编辑

    收藏 2906 1034 mySQL(关系型数据库管理系统)编辑 MySQL[1] 是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是最流行的关系型数据 ...

最新文章

  1. 简单快速的开发WEB应用, PHP 框架 Lemon 介绍
  2. 文档过期打不开怎么办_网络上下载文档,常见的3个问题,一招教你快速解决!...
  3. 简单的对象监听器 观察者设计模式
  4. ansible(自动化运维下)——yaml语言,Role-角色扮演
  5. 并发(concurrency)和并行(parallellism)
  6. 一款强大的cisco模拟配置、拓扑制作工具
  7. html php即时通讯_PHP在线客服即时通讯源码
  8. 尼康d850相机参数测试软件,尼康D850 这可能是你唯一需要的单反相机
  9. 计算机里找不到用户文件夹,电脑里没有appdata文件夹,c盘users文件夹可以删除吗...
  10. project不显示里程碑标志_如何在项目管理中使用里程碑
  11. 扫雷代码(包含扩展函数)
  12. AttributeError: module ‘win32com.gen_py.00020905-0000-4B30-A977-D214852036FF
  13. 2021年最新最全APP各大安卓市场应用首发规则
  14. IIS 端口netstat -ano命令
  15. 【答学员问】假如面试通过,我能不能问hr为什么选择我?
  16. 有什么好用的便宜的云服务器?
  17. 智慧工厂用到的技术_智慧工厂如何实现智能化
  18. 2017省市区最新编码(依据国家统计局最新数据生成)
  19. 火车采集器 免费版 html标签排除,Html代码白名单过滤插件(C#)
  20. linux_端口占用扫描port scan(lsof/ss/netstat/Nmap)使用实例

热门文章

  1. Linux下文件夹的自动同步
  2. seo优化培训教程之企业网站SEO优化策略
  3. C++中的rotate函数
  4. 【Golang面向对象编程-第一节】
  5. linux驱动之设备模型
  6. __x__(20)0907第四天__列表ul,ol,dl
  7. 害死人的ddos,价格屠夫安易ES系列抗DDOS硬件防火墙
  8. Kotlin-20.代理/委托属性(delegated properties)
  9. 尚学堂Oracle经验
  10. SPICE电路仿真(3)--二极管