第一章 数据库分类
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以及root@127.0.0.1
- 删除默认的test数据库
- 增加用户的时候,授权的权限尽量给小,允许访问的 主机范围最小化。
- 登录命令行提示不携带密码,而是回车输入密码,使用交互式。