第十九天:Mysql基础入门
一、关系型数据库基础
1、数据的分类
结构化的数据 非结构化的数据 半结构化数据
2、关系型数据库 RDBMS
(1)常用关系数据库
MySQL: MySQL, MariaDB, Percona Server
PostgreSQL: 简称为pgsql,EnterpriseDB
Oracle
MSSQL Server
DB2
3、数据库的正规化分析
(1)第一范式
无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有
多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列
(2)第二范式
第二范式必须先满足第一范式,属性完全依赖于主键,要求表中的每个行必须可以被唯一地区分,通常
为表加上每行的唯一标识主键PK,非PK的字段需要与整个PK有直接相关性,即非PK的字段不能依赖于部
分主键
(3)第三范式
满足第三范式必须先满足第二范式属性,非主键属性不依赖于其它非主键属性。第三范式要求一个数据
表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系
二、安装MySQL
1、mysql三大分支
MySQL https://www.mysql.com/
Mariadb http://mariadb.org/
Percona Server https://www.percona.com
官方文档:
https://dev.mysql.com/doc/
https://mariadb.com/kb/en/
https://www.percona.com/software/mysql-database/percona-server
2、安装方式
程序包管理器管理的程序包
源代码编译安装
二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
3、RPM包安装MySQL
CentOS 安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/
https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/
CentOS 8:安装光盘直接提供
mysql-server:8.0
mariadb-server : 10.3
CentOS 7:安装光盘直接提供
mariadb-server:5.5 服务器包
mariadb 客户端工具包
4、初始化脚本提高安全性 5.6版本
运行脚本:mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库
三、MySQL 组成和常用工具
1、客户端程序
mysql: 基于mysql协议交互式或非交互式的CLI工具
mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成
insert等写操作语句保存文本文件中
mysqladmin:基于mysql协议管理mysqld
mysqlimport:数据导入工具
MyISAM存储引擎的管理工具:
myisamchk:检查MyISAM库
myisampack:打包MyISAM表,只读
2、服务器端程序
mysqld_safe
mysqld
mysqld_multi 多实例 ,示例:mysqld_multi --example
3、用户账号
mysql用户账号由两部分组成:
'USERNAME'@'HOST'
wang@'10.0.0.100'
wang@'10.0.0.%'
wang@'%'
4、mysql命令使用格式
mysql [OPTIONS] [database]
5、服务器端配置文件
6、客户端配置文件
#查看mysql版本 [root@centos8 ~]#mysql -V mysql Ver 15.1 Distrib 10.3.11-MariaDB, for Linux (x86_64) using readline 5.1 #临时修改mysql提示符 [root@centos8 ~]#mysql -uroot -pcentos --prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_" #临时修改mysql提示符 [root@centos8 ~]#export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_" #持久修改mysql提示符 [root@centos8 ~]#vim /etc/my.cnf.d/mysql-clients.cnf [mysql] prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_" #12小进制 prompt="\\R:\\m:\\s(\\u@\\h) [\\d]>\\_" #24小时制
vim /etc/my.cnf.d/client.cnf
[client]
user=wang
password=123456
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
7、mysqladmin命令
#查看mysql服务是否正常,如果正常提示mysqld is alive mysqladmin -uroot -pcentos ping #关闭mysql服务,但mysqladmin命令无法开启 mysqladmin -uroot -pcentos shutdown #创建数据库testdb mysqladmin -uroot -pcentos create testdb #删除数据库testdb mysqladmin -uroot -pcentos drop testdb #修改root密码 mysqladmin -uroot -pcentos password 'magedu' #日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N mysqladmin -uroot -pcentos flush-logs
8、mycli
MyCLI 是基于Python开发的MySQL的命令行工具,具有自动完成和语法突出显示功能
9、服务器配置文件
10、socket 连接说明
11、关闭mysqld网络连接
只侦听本地客户端, 所有客户端和服务器的交互都通过一个socket文件实现,socket的配置存放
在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改
vim /etc/my.cnf [mysqld] skip-networking=1 bind_address=127.0.0.1
四、通用二进制格式安装 MySQL8.0
1、安装相关包
yum -y install libaio numactl-libs ncurses-compat-libs
2、创建用户和组
groupadd mysql useradd -r -g mysql -s /bin/false mysql
3、准备程序文件
wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linuxglibc2.12-x86_64.tar.gz tar xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local cd /usr/local/ ln -s mysql-5.7.31-linux-glibc2.12-x86_64/ mysql chown -R root.root /usr/local/mysql/
4、准备环境变量
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh . /etc/profile.d/mysql.sh
5、准备配置文件
cp /etc/my.cnf{,.bak} vim /etc/my.cnf [mysqld] datadir=/data/mysql skip_name_resolve=1 socket=/data/mysql/mysql.sock log-error=/data/mysql/mysql.log pid-file=/data/mysql/mysql.pid [client] socket=/data/mysql/mysql.sock
6、初始化数据库文件并提取root密码
#/data/mysql 会自动生成,但是/data/必须事先存在
mkdir -pv /data/mysql
7、密码
生成随机密码
mysqld --initialize --user=mysql --datadir=/data/mysql
grep password /data/mysql/mysql.log
生成空密码
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
8、准备服务脚本和启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld chkconfig --add mysqld service mysqld start
9、修改口令
#修改前面生成的随机密码为指定密码 mysqladmin -uroot -p'LufavlMka6,!' password magedu #修改前面生成的空密码为指定密码 mysqladmin -uroot password magedu
五、基于DOCKER容器创建MYSQL
#docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30 #mysql -uroot -p123456 -h127.0.0.1
六、MYSQL多实例安装
1、多实例常见的配置方案
单一的配置文件、单一启动程序多实例部署方式
多配置文件、多启动程序部署方式
2、安装mariadb/mysql
yum -y install mariadb-server
3、准备三个实例的目录
mkdir -pv /mysql/{3306,3307,3308}/{data,etc,socket,log,bin,pid} chown -R mysql.mysql /mysql tree -d /mysql/
4、生成数据库文件
mysql_install_db --user=mysql --datadir=/mysql/3306/data mysql_install_db --user=mysql --datadir=/mysql/3307/data mysql_install_db --user=mysql --datadir=/mysql/3308/data
5、准备配置文件
#vim /mysql/3306/etc/my.cnf [mysqld] port=3306 datadir=/mysql/3306/data socket=/mysql/3306/socket/mysql.sock log-error=/mysql/3306/log/mysql.log pid-file=/mysql/3306/pid/mysql.pid
#重复上面步骤设置3307,3308
[root@centos8 ~]#sed 's/3306/3307/' /mysql/3306/etc/my.cnf >
/mysql/3307/etc/my.cnf
[root@centos8 ~]#sed 's/3306/3308/' /mysql/3306/etc/my.cnf >
/mysql/3308/etc/my.cnf
6、准备启动脚本
vim /mysql/3306/bin/mysqld 略..
#增加执行权限 chmod +x /mysql/3306/bin/mysqld
7、启动、关闭服务
/mysql/3306/bin/mysqld start
/mysql/3308/bin/mysqld stop
8、登录实例
mysql -h127.0.0.1 -P3308 mysql -uroot -S /mysqldb/3306/socket/mysql.sock
9、修改root密码
mysqladmin -uroot -S /mysql/3306/socket/mysql.sock password '***'
10、开机启动
vi /etc/rc.d/rc.local #在最后一行加下面内容 for i in {3306..3308};do /mysql/$i/bin/mysqld start;done [root@centos8 ~]#chmod +x /etc/rc.d/rc.local