1. 程式人生 > >MYSQL 漸行漸遠的開源關系型數據庫典範

MYSQL 漸行漸遠的開源關系型數據庫典範

wrapper 收購 cti mar distrib commands base 方式 ttr

技術分享圖片
多年以前,隨著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 73
f300a76ee1: 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 ~]#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

啟動鏡像

正常啟動一個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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 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”.

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

MYSQL 漸行漸遠的開源關系型數據庫典範