第一章 數據庫分類
1. 關係型數據庫
數據庫裏有很多二維表格,表一表二表三表一百等等。多張表之間可能有關聯。
2. 非關係型數據庫
包含多個數據庫服務(多實例)3306/3307/3307。
每個數據庫服務實例包含多個庫。
每個庫裏包含多個表。
1號倉庫:表1表2。
2號倉庫:表3表4。
每張表包含多行數據。
3. 數據庫產品
MySQL和Oracle數據庫,都屬於oracle公司
oracle大型傳統企業
MySQL互聯網企業
access小型(微軟)
4. 數據庫分類各版本
名稱 | 版本 |
---|---|
Oracle | 版本包括Oracle8i、Oracle9i、Oracle10g、Oracle11g、Oracle12c等 |
MariaDB | 數據庫管理系統是MySQL數據庫的一個分支。 |
微軟SQL Server | SQL Server數據庫。Access數據庫(office套件 php/asp+access) |
第二章 關係型數據庫
特點: SQL結構化查詢語言管理關係型數據庫!
1. 二維表
關係型數據庫在存儲數據時實際就是採用的一張二維表(和word、Excel裏表格幾乎一樣)
2. 市場佔有量
市場佔有量較大的是MySQL和Oracle數據庫,而互聯網場景最常用的是MySQL數據庫。
3. SQL結構化查詢語言
它通過SQL結構化查詢語言來存取、管理關係型數據庫的數據。
4. 安全一致性高
關係型數據庫在保持數據安全和數據一致性方面很強,遵循ACID理論。
第三章 非關係型數據庫
NoSQL數據庫是not only sql,不僅僅是SQL。
立足油頭:只關注高性能、高併發。
Memcached純內存軟件。Rsdis內存也可以持久化
管理NoSQL不再是SQL結構化查詢語言
數據表現:不是二維表格了,管理也不是使用SQL語句了。
非關係型數據庫(NOSQL)只是小結:
1. 關於數據庫的補充
NOSQL數據庫不是否定關係數據庫,而是作爲關係數據庫的一個重要補充。
2. 專注高性能高併發
NOSQL數據庫爲了靈活及高性能、高併發而生,忽略影響高性能、高併發的功能。
3. 典型產品Redis
在NOSQL數據庫領域,當今的最典型產品爲Redis(持久化緩存)、Mongodb、memcached(純內存)等。
4. 沒有標準的查詢語言
NoSQL數據庫沒有標準的查詢語言(SQL),通長使用REST式的數據接口或者查詢API。
第四章 MySQL工作流程原理
第五章 MySQL安裝步驟
- yum/rpm不能定製
- 5.0產品 configure、make、make install
- 5.6產品 ./cmake ,make,make install
- 二進制,解壓即可
- 利用源碼編譯安裝,做成rpm包,然後在yum倉庫yum安裝*
1. 源碼安裝包下載
wget https://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.37.tar.gz
2. 安裝依賴包
yum install ncurses-devel libaio-devel gcc-c++ -y
3. cmake安裝
yum install -y cmake
4. 添加用戶
useradd -s /sbin/nologin -M mysql
5. 解壓安裝包
tar xf mysql-5.6.37.tar.gz
cd mysql-5.6.37/
6. cmake配置
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.37 \
-DMYSQL_DATADIR=/application/mysql-5.6.37/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.37/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=bundled \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0
#更多內容可以參考官方MySQL 5.6的cmake編譯參數http://dev.mysql.com/doc/refman/5.6/en/source-#configuration-options.html
7. 編譯和編譯安裝
make && make install
8. 創建軟鏈接
ln -s /application/mysql-5.6.37/ /application/mysql
9. 拷貝配置文件
cp support-files/my*.cnf /etc/my.cnf
10. 初始化數據庫
/application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql
11. 更改所有者屬組授權
chown -R mysql.mysql /application/mysql/
12. 配置啓動腳本
cp support-files/mysql.server /etc/init.d/mysqld
13. 更改權限700
chmod 700 /etc/init.d/mysqld
14. 加入開機自啓動
chkconfig mysqld on
chkconfig --list mysqld
15. 啓動MySQL
sed -i '/socket/a socket = /application/mysql-5.6.37/data/mysql.sock' /etc/my.cnf
/etc/init.d/mysqld start
[root@mysql-51 mysql]# ss -lntup|egrep 3306
tcp LISTEN 0 80 :::3306 :::* users:(("mysqld",pid=24588,fd=10))
16. 設置MySQL環境變量
echo 'PATH=/application/mysql/bin/:$PATH' >>/etc/profile
tail -1 /etc/profile
source /etc/profile
echo $PATH
mysql -S /application/mysql-5.6.37/data/mysql.sock
17. root用戶設置密碼
mysqladmin -uroot password '123456' -S /application/mysql/data/mysql.sock
mysql -uroot -p123456 -S /application/mysql/data/mysql.sock
第六章 MySQL多實例安裝
1. 先停掉單實例
/etc/init.d/mysqld stop
2. 上傳data-5.6-new-book.zip多實例包
unzip data-5.6-new-book.zip
Archive: data-5.6-new-book.zip
creating: data/
creating: data/3306/
inflating: data/3306/my.cnf
inflating: data/3306/mysql
creating: data/3307/
inflating: data/3307/my.cnf
inflating: data/3307/mysql
[root@mysql-51 ~]# tree /data/
/data/
├── 3306
│ ├── my.cnf
│ └── mysql
└── 3307
├── my.cnf
└── mysql
3. 配置文件區別
vimdiff /data/3306/my.cnf /data/3307/my.cnf #僅有端口之間的區別
mkdir /data/{3306,3307}/data -p
chown -R mysql.mysql /data/
4. 初始化數據庫
cd /application/mysql/scripts
./mysql_install_db --defaults-file=/data/3306/my.cnf --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
./mysql_install_db --defaults-file=/data/3307/my.cnf --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql
/data/3306/mysql start
/data/3307/mysql start
ss -lntup|egrep 330
mysql -S /data/3306/mysql.sock
mysql -S /data/3307/mysql.sock
[root@mysql-51 3307]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1243/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1776/master
tcp6 0 0 :::3306 :::* LISTEN 17831/mysqld
tcp6 0 0 :::3307 :::* LISTEN 19338/mysqld
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 1243/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1776/master
第七章 添加3308數據庫
mkdir -p /data/3308/data
\cp /data/3306/my.cnf /data/3308/
\cp /data/3306/mysql /data/3308/
sed -i 's/3306/3308/g' /data/3308/my.cnf
sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf
sed -i 's/3306/3308/g' /data/3308/mysql
chown -R mysql:mysql /data/3308
chmod 700 /data/3308/mysql
cd /application/mysql/scripts
./mysql_install_db --defaults-file=/data/3308/my.cnf --datadir=/data/3308/data --basedir=/application/mysql --user=mysql
chown -R mysql:mysql /data/3308
egrep "server-id|log-bin" /data/3308/my.cnf
/data/3308/mysql start
sleep 5
netstat -lnt|grep 3308
第八章 MySQL啓動與關閉
1. 單實例啓動關閉
##<==最先使用MySQL自帶的管理腳本
/etc /init.d/mysqld stop
##<==第二種爲mysqladmin管理方法
mysqladmin -uroot -poldboy123 shutdown ##這個命令的最大障礙就是必須事先知道密碼
##<==第三種爲利用系統進程管理方法
kill pid ##<==這裏的pid爲數據庫服務對應的進程號
killall mysqld ##<==這裏的mysqld是數據庫服務對應的進程名字
pill mysqld ##<==這裏的mysqld是數據庫服務對應的進程名字
2. 多實例啓動關閉
啓動3306示例命令服務的命令爲/data/3306/mysql start,實際上就是就是msqld_safe加上不同的示例配置文件參數啓動,示例如下:
mysqld_safe --default-file=/data/my.cnf 2>&1 >/dev/null &
停止3306示例命令爲/data/3306/mysqld stop,實際上就是使用mysqladmin命令方法,示例如下:
mysqladmin -uroot -poldboy123 -S /data/3306/mysql.sock shutdown
第九章 MySQL登錄安全優化
1. 交互式
[root@mysql_52 ~]# mysql -uroot -p
Enter password:
[root@db02 ~]# HISTCONTROL=ignorespace 忽略命令開頭帶空格放入環境變量
[root@db02 ~]# mysql -uroot -poldboy123
2. 非交互式
[root@mysql_52 ~]# mysql -uroot -poldboy123
3. 寫入配置文件
[root@mysql_52 ~]# vim /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[client]
user=root
password=oldboy123
[root@mysql_52 ~]# chmod 600 /etc/my.cnf
[root@mysql_52 ~]# ll /etc/my.cnf
-rw------- 1 root root 1164 Jun 20 16:04 /etc/my.cnf
第十章 MySQL用戶密碼找回
[root@mysql_52 ~]# mysqld_safe --skip-grant-table --user=root &
[root@mysql_52 ~]# mysql
mysql> update mysql.user set password=password('oldboy123') where user='root' and host='localhost';
mysql> flush privileges;
第十一章 MySQL注意事項
- 爲root用戶設置比較複雜的密碼。
- 刪除無用的mysql庫內的用戶賬號,只保留root@localhost以及[email protected]
- 刪除默認的test數據庫
- 增加用戶的時候,授權的權限盡量給小,允許訪問的 主機範圍最小化。
- 登錄命令行提示不攜帶密碼,而是回車輸入密碼,使用交互式。