總所周知,MySQL 被 Oracle 收購(gòu)后,CentOS 的鏡像倉(cāng)庫(kù)中提供的默認(rèn)的數(shù)據(jù)庫(kù)也變?yōu)榱?MariaDB,如果想了解 MariaDB 和 CentOS 的區(qū)別,可以參考官網(wǎng)介紹,想用 MariaDB 的同學(xué)可以參考 MariaDB 安裝指南
言歸正傳,在 CentOS 上安裝 MySQL 差不多有四個(gè)步驟
根據(jù)自己的操作系統(tǒng)選擇合適的安裝源,和其他公司一樣,總會(huì)讓大家注冊(cè)賬號(hào)獲取更新,注意是 Oracle 的賬號(hào),如果不想注冊(cè),下方有直接下載的地址,下載之后通過(guò) rpm -Uvh
安裝。
$wget 'https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'$sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm$yum repolist all | grep mysqlmysql-connectors-community/x86_64 MySQL Connectors Community 36mysql-tools-community/x86_64 MySQL Tools Community 47mysql57-community/x86_64 MySQL 5.7 Community Server 187
先解釋下為什么下載的是 5.7 版本的,現(xiàn)在最新的是 5.7 版本的,當(dāng)然官網(wǎng)默認(rèn)都是最新版本的,但是下載的頁(yè)面也有說(shuō)明
The MySQL Yum repository includes the latest versions of:
MySQL 8.0 (Development)
MySQL 5.7 (GA)
MySQL 5.6 (GA)
MySQL 5.5 (GA - Red Hat Enterprise Linux and Oracle Linux Only)
MySQL Cluster 7.5 (GA)
MySQL Cluster 7.6 (Development)
MySQL Workbench
MySQL Fabric
MySQL Router (GA)
MySQL Utilities
MySQL Connector / ODBC
MySQL Connector / Python
MySQL Shell (GA)
也就是說(shuō)這個(gè)安裝源包含了上面列舉的這些版本,當(dāng)然包括 5.6 版本的。
如果想安裝最新版本的,直接使用 yum 命令即可
$sudo yum install mysql-community-server
如果想要安裝 5.6 版本的,有2個(gè)方法。命令行支持 yum-config-manager
命令的話,可以使用如下命令:
$ sudo dnf config-manager --disable mysql57-community$ sudo dnf config-manager --enable mysql56-community$ yum repolist | grep mysqlmysql-connectors-community/x86_64 MySQL Connectors Community 36mysql-tools-community/x86_64 MySQL Tools Community 47mysql56-community/x86_64 MySQL 5.6 Community Server 327
或者直接修改 /etc/yum.repos.d/mysql-community.repo
這個(gè)文件
# Enable to use MySQL 5.6[mysql56-community]name=MySQL 5.6 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/enabled=1 #表示當(dāng)前版本是安裝gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql[mysql57-community]name=MySQL 5.7 Community Serverbaseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/enabled=0 #默認(rèn)這個(gè)是 1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
通過(guò)設(shè)置 enabled
來(lái)決定安裝哪個(gè)版本。
設(shè)置好之后使用 yum
安裝即可。
啟動(dòng)命令很簡(jiǎn)單
$sudo service mysqld start $sudo systemctl start mysqld #CentOS 7$sudo systemctl status mysqld● mysqld.service - MySQL Community Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2017-05-27 12:56:26 CST; 15s ago Process: 2482 ExecStartPost=/usr/bin/mysql-systemd-start post (code=exited, status=0/SUCCESS) Process: 2421 ExecStartPre=/usr/bin/mysql-systemd-start pre (code=exited, status=0/SUCCESS) Main PID: 2481 (mysqld_safe) CGroup: /system.slice/mysqld.service ├─2481 /bin/sh /usr/bin/mysqld_safe --basedir=/usr └─2647 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/...
說(shuō)明已經(jīng)正在運(yùn)行中了。
對(duì)于 MySQL 5.7 版本,啟動(dòng)的時(shí)候如果數(shù)據(jù)為空的,則會(huì)出現(xiàn)如下提示
The server is initialized.
An SSL certificate and key files are generated in the data directory.
The validate_password plugin is installed and enabled.
A superuser account 'root'@'localhost' is created. A password for the superuser is set and stored in the error log file.To reveal it, use the following command:sudo grep 'temporary password' /var/log/mysqld.log
簡(jiǎn)單的說(shuō)就是服務(wù)安裝好了,SSL 認(rèn)證的文件會(huì)在 data 目錄中生存,密碼不要設(shè)置的太簡(jiǎn)單了,初始密碼通過(guò)下面的命令查看,趕緊去改密碼吧。
安裝提示,查看密碼,登錄數(shù)據(jù)庫(kù),然后修改密碼:
$ mysql -uroot -p #輸入查看到的密碼mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
由于 5.7 版本在安裝的時(shí)候就設(shè)置好了,不需要額外設(shè)置,但是 5.6 版本建議從安全角度完善下,運(yùn)行官方腳本即可
$ mysql_secure_installation
會(huì)提示設(shè)置5個(gè)關(guān)鍵位置
查看 yum 源中有哪些默認(rèn)的組件:
$ yum --disablerepo=\* --enablerepo='mysql*-community*' list available
需要安裝直接通過(guò) yum
命令安裝即可。
在 /etc/my.cnf
中設(shè)置默認(rèn)的編碼
[client]default-character-set = utf8[mysqld]default-storage-engine = INNODBcharacter-set-server = utf8collation-server = utf8_general_ci #不區(qū)分大小寫collation-server = utf8_bin #區(qū)分大小寫collation-server = utf8_unicode_ci #比 utf8_general_ci 更準(zhǔn)確
創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE <datebasename> CHARACTER SET utf8;CREATE USER 'username'@'host' IDENTIFIED BY 'password';GRANT privileges ON databasename.tablename TO 'username'@'host';SHOW GRANTS FOR 'username'@'host';REVOKE privilege ON databasename.tablename FROM 'username'@'host';DROP USER 'username'@'host';
其中
Django 默認(rèn)使用的是 sqlite3 數(shù)據(jù)庫(kù),可以修改如下
DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'read_default_file': '/path/to/my.cnf', 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'" , 'isolation_level':'read committed', 'init_command': 'SET default_storage_engine=INNODB', }, 'NAME': 'mydatabase', 'USER': 'mydatabaseuser', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '3306', }}# my.cnf[client]database = 'mydatabase'user = 'mydatabaseuser'password = 'mypassword'default-character-set = utf8
重點(diǎn)關(guān)注下 OPTIONS
選項(xiàng),它會(huì)優(yōu)先與下面的配置項(xiàng)。在 Django 官方文檔說(shuō)明中,主要強(qiáng)調(diào)了 init_command
, isolation_level
這兩個(gè)選項(xiàng)的設(shè)置。
為了防止數(shù)據(jù)的丟失,mysql 5.7 和新裝的 5.6 版本都新增加了一個(gè)模式 STRICT_TRANS_TABLES
,在這個(gè)模式下,如果插入數(shù)據(jù)中斷就會(huì)報(bào)錯(cuò),而不是僅僅之前的警告。之前的模式默認(rèn)為 NO_ENGINE_SUBSTITUTION
. 所以也建議設(shè)置為 STRICT_TRANS_TABLES
或者 STRICT_ALL_TABLES
. 在選項(xiàng)中設(shè)置或者在數(shù)據(jù)庫(kù)中設(shè)置都可以的。
這是在 Django 1.11 版本中新增加的一個(gè)選擇,當(dāng)運(yùn)行并發(fā)負(fù)載時(shí),來(lái)自不同會(huì)話的數(shù)據(jù)庫(kù)事務(wù)(例如,處理不同請(qǐng)求的單獨(dú)線程)可能會(huì)相互交互,這些交互受每個(gè)會(huì)話的事務(wù)隔離級(jí)別的影響。默認(rèn)有 5 個(gè)隔離級(jí)別,默認(rèn)為 REPEATABLE-READ
mysql> SELECT @@global.tx_isolation;+-----------------------+| @@global.tx_isolation |+-----------------------+| REPEATABLE-READ |+-----------------------+1 row in set (0.00 sec)- read uncommitted # SELECT的時(shí)候允許臟讀,即SELECT會(huì)讀取其他事務(wù)修改而還沒(méi)有提交的數(shù)據(jù)。- read committed# SELECT的時(shí)候無(wú)法重復(fù)讀,即同一個(gè)事務(wù)中兩次執(zhí)行同樣的查詢語(yǔ)句,若在第一次與第二次查詢之間時(shí)間段,其他事務(wù)又剛好修改了其查詢的數(shù)據(jù)且提交了,則兩次讀到的數(shù)據(jù)不一致。- repeatable read# SELECT的時(shí)候可以重復(fù)讀,即同一個(gè)事務(wù)中兩次執(zhí)行同樣的查詢語(yǔ)句,得到的數(shù)據(jù)始終都是一致的。實(shí)現(xiàn)的原理是,在一個(gè)事務(wù)對(duì)數(shù)據(jù)行執(zhí)行讀取或?qū)懭氩僮鲿r(shí)鎖定了這些數(shù)據(jù)行。但是這種方式又引發(fā)了幻想讀的問(wèn)題。因?yàn)橹荒苕i定讀取或?qū)懭氲男?,不能阻止另一個(gè)事務(wù)插入數(shù)據(jù),后期執(zhí)行同樣的查詢會(huì)產(chǎn)生更多的結(jié)果。數(shù)據(jù)庫(kù)默認(rèn)的級(jí)別。- serializable# 與可重復(fù)讀的唯一區(qū)別是,默認(rèn)把普通的SELECT語(yǔ)句改成SELECT …. LOCK IN SHARE MODE。即為查詢語(yǔ)句涉及到的數(shù)據(jù)加上共享瑣,阻塞其他事務(wù)修改真實(shí)數(shù)據(jù)。serializable模式中,事務(wù)被強(qiáng)制為依次執(zhí)行。- None# 無(wú)隔離級(jí)別
mysql 中默認(rèn)的時(shí)間戳是 UTC 時(shí)間,需要改為服務(wù)器時(shí)間的話官網(wǎng)提供了 3 種方式
$ mysql_tzinfo_to_sql tz_dir$ mysql_tzinfo_to_sql tz_file tz_name$ mysql_tzinfo_to_sql --leap tz_file
tz_dir 代表服務(wù)器時(shí)間數(shù)據(jù)庫(kù),CentOS 7 中默認(rèn)的目錄為 /usr/share/zoneinfo
,tz_name 為具體的時(shí)區(qū)。如果設(shè)置的時(shí)區(qū)需要閏秒,則使用 --leap
,具體的用法如下:
$ mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root -p mysql$ mysql_tzinfo_to_sql tz_file tz_name | mysql -u root mysql$ mysql_tzinfo_to_sql --leap tz_file | mysql -u root mysql
聯(lián)系客服