mysql阶段01 DBA介绍, 数据库介绍, mysql介绍, mysql二进制安装, mysql源码安装, system管理使用mysql
1.初级: mysql安装、搭建
1.用户的权限 2.用户可以操作的库 3.用户的来源主机 4.用户的密码 grant show,create on zh.* to zh@'172.16.1.%' identified by '123';
1.数据备份 2.数据恢复 3.SQL语句管理 DDL: create(表,视图,索引) DCL: GRANT DML: INSERT UPDATE DELETE DQL: SELECT
3)配置管理
4)集群管理
5)监控
1.进程 2.端口 3.主从状态 4.主从延迟情况 5.sql读写速率 6.慢查询
1.系统监控(监控硬件) 2.服务监控 3.端口监控 4.网络监控 5.业务监控(curl接口测试)
1.不要动不动删库跑路
2.不要轻易甩锅,甩锅也甩到其他部门
1.每条sql执行前,必须经过测试
drop: 删除表
truncate: 清空表
delete: 删除数据
1.敲命令时要细心,show slave status\G 不用加;
4.心态
5.熟悉操作系统
1.熟悉到每一个库下每一个表是做什么的
7.熟悉行业
MySQL简介及安装
1.什么是数据
数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,成为数字数据。 在计算机系统中,数据以二进制信息单位0,1的形式表示。 数据的定义:数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的薪资、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。* 一般数据存储: 存储在word里,缺点: 1.word存储,打开时加载内存 2.数据查询不方便 3.安全级别不搞 4.word不支持集群 所以,我们需要数据库管理系统
用来管理数据的系统 DBMS (database management system)
1)关系型数据库(RDBMS)
MySQL
Oracle
MSSQL(SQL server)
以多张二维表的方式来存储,又给多张表建立了一定的关系(关系型数据库)
范式: 把数据库数据拆分成多个表,拆到不能再拆
redis
memcache
mongodb
elasticsearch(搜索引擎式数据库)
一般情况NoSQL用来做缓存
很多以json格式进行存储数据的(mongodb),java代码的数据可以转成json格式给到python或者php进行解析
关系型数据库: 1.强大的查询功能 2.强一致性(事务) 3.二级索引 非关系型数据库: 1.灵活 2.扩展性(扩展比较方便) 3.性能搞(缓存)
特点对比: 关系型数据库(RDBMS)的特点: 1.二维表 2.数据存取是通过SQL(Structured Query Language结构化查询语言) 3.最大特点数据安全性方面强(ACID) 原子性,一致性,隔离性,持久性 非关系型数据库(NoSQL: Not only SQL)的特定: 1.不是否定关系型数据库,而是做关系型数据库的补充 2.性能高
1.不是否定关系型数据库,而是做关系型数据库的补充,现在也有部分替代mongodb的趋势。 2.关注高性能,高并发,灵活性,忽略和上述无关的功能。 3.现在也在提升安全性和使用功能。 4.典型产品: redis (持久化缓存)、MongoDB(最接近关系型数据库的NoSQL)、memcached。 5.管理不使用SQL管理,而是用一些特殊的API或者数据接口。
1.键值(KV)存储:memcached、redis 2.列存储(column-oriented):HBASE(新浪、360) Cassandra(200台服务器集群) 3.文档数据库(document-oriented): MongoDB(最接近关系型数据库的NoSQL) 4.图形存储(Graph):Neo4j
1)MySQL数据库版本介绍
- 1.0 - 5.1 - 5.5 - 5.6 - 5.7 - 8.0 我们选择数据库的时候,选择版本潜规则: 5.6版本选择:GA(开头Generic,结尾Archive) 6-12个月(距离发布时间,稳定了),小版本是偶数版 5.7版本选择: GA 6-12个月,小版本是偶数班,5.7.17版本以上(MGR,MySQL自带的高可用)
下载包
点击Download Archives,如图
点击社区版,如图
选择版本,Source Code源码包(Linux-Generic为二进制包) 如图
选择源码包,点击下载,如图
安装方式: 1.yum的rpm安装 2.二进制安装 3.源码包安装
1) 上传或者下载二进制包
[root@db03 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz 或者 [root@db03 ~]# rz mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
[root@db03 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf #一定要先安装依赖,再解压包(没有gcc会有问题,模板机优化一般会装gcc)
[root@db03 ~]# tar xf mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz
[root@db03 ~]# mv mysql-5.6.46-linux-glibc2.12-x86_64/ /usr/local/mysql-5.6.46
[root@db03 local]# ln -s /usr/local/mysql-5.6.46/ /usr/local/mysql
[root@db03 local]# useradd mysql -s /sbin/nologin -M
#centos7默认有mariadb配置文件,不能用 #1.进入配置文件和脚本的目录 [root@db03 local]# cd /usr/local/mysql/support-files/ #2.拷贝配置文件 (etc下my.cnf是默认mariadb的配置文件,没用) [root@db03 support-files]# cp my-default.cnf /etc/my.cnf cp: overwrite ‘/etc/my.cnf’? y #3.拷贝启动脚本 [root@db03 support-files]# cp mysql.server /etc/init.d/mysqld
#1.进入初始化目录 [root@db03 support-files]# cd /usr/local/mysql/scripts/ #2.执行初始化命令 # --datadir数据存放路径(这里用默认路径) [root@db03 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user: 指定用户 --basedir: 指定mysql的安装目录 --datadir: 指定mysql的数据目录 #3.初始化成功的标示 1.出现2个 OK 2.ll /usr/local/mysql/data目录下有多个文件 正经的数据库里面应该有四个库: mysql performance_schema test information_schema
[root@db03 scripts]# /etc/init.d/mysqld start Starting MySQL.Logging to '/usr/local/mysql/data/db03.err'. #日志会往里面写,不是报错 .. SUCCESS! #关闭 /etc/init.d/mysqld stop
[root@db03 scripts]# ps -ef|grep [m]ysql root 8644 1 0 04:28 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/db03.pid mysql 8752 8644 0 04:28 pts/0 00:00:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=db03.err --pid-file=/usr/local/mysql/data/db03.pid [root@db03 scripts]# netstat -lntp|grep 3306 tcp6 0 0 :::3306 :::* LISTEN 8752/mysqld #进入mysql [root@db03 scripts]# /usr/local/mysql/bin/mysql
#1.配置system管理MySQL [root@db03 system]# vim /usr/lib/systemd/system/mysql.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 #2.重新加载启动文件列表(非必要,当直接systemctl启动报错,就加载下) [root@db03 system]# systemctl daemon-reload #3.system管理启动mysql [root@db03 system]# systemctl start mysql #检查进程端口 [root@db03 system]# ps -ef|grep [m]ysql mysql 8918 1 10 05:21 ? 00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf [root@db03 system]# netstat -lntp|grep 3306 tcp6 0 0 :::3306 :::* LISTEN 8918/mysqld
[root@db03 system]# vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH [root@db03 system]# source /etc/profile [root@db03 system]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 ...
[root@db02 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.46.tar.gz 或者 [root@db02 ~]# rz mysql-5.6.46.tar.gz
[root@db02 ~]# yum install -y ncurses-devel libaio-devel gcc gcc-c++ glibc cmake autoconf openssl openssl-devel
[root@db02 ~]# tar xf mysql-5.6.46.tar.gz
[root@db02 ~]# cd mysql-5.6.46/ #程序存放位置 (注意下面的cmake语句当前版本安装会ssl报错,用下面另一个cmake语句) [root@db02 mysql-5.6.46]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.46 \ -DMYSQL_DATADIR=/usr/local/mysql-5.6.46/data \ -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.46/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 \ #注意5.6.46版本不支持这个SSL,要改成system -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0 #安装失败,把CMakeCache删除,这个是cmake执行后生成的文件。想重新生成必须删除以后,再执行cmake [root@db02 mysql-5.6.46]# rm -rf CMakeCache.txt #5.6.46版本需要执行这个cmake [root@db02 mysql-5.6.46]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.6.46 \ -DMYSQL_DATADIR=/usr/local/mysql-5.6.46/data \ -DMYSQL_UNIX_ADDR=/usr/local/mysql-5.6.46/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=system \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0
[root@db02 mysql-5.6.46]# make && make install
[root@db02 local]# ln -s /usr/local/mysql-5.6.46/ /usr/local/mysql
[root@db02 local]# useradd mysql -s /sbin/nologin -M
[root@db02 local]# cd /usr/local/mysql/support-files/ #拷贝配置文件 (etc下my.cnf是默认mariadb的配置文件,没用) [root@db02 support-files]# cp my-default.cnf /etc/my.cnf cp: overwrite ‘/etc/my.cnf’? y #拷贝启动脚本 [root@db02 support-files]# cp mysql.server /etc/init.d/mysqld
#1.进入初始化目录 [root@db02 support-files]# cd /usr/local/mysql/scripts/ #2.执行初始化命令 # --datadir数据存放路径(这里用默认路径) [root@db02 scripts]# ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data #3.初始化成功的标示 1.出现2个 OK 2.ll /usr/local/mysql/data目录下有多个文件 正经的数据库里面应该有四个库: mysql performance_schema test information_schema
#启动失败,查看错误日志,socket存放路径不存在,但这个路径不会自动创建 [root@db02 mysql-5.6.46]# mkdir /usr/local/mysql-5.6.46/tmp #启动失败,查看错误日志,是权限不足 # 2024-06-05 08:09:55 32446 [ERROR] Can't start server : Bind on unix socket: Permission denied [root@db02 mysql-5.6.46]# chown -R mysql.mysql /usr/local/mysql-5.6.46/ [root@db02 mysql-5.6.46]# /etc/init.d/mysqld start
#1.配置system管理MySQL [root@db02 system]# vim /usr/lib/systemd/system/mysql.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 #2.重新加载启动文件列表(非必要,当直接systemctl启动报错,就加载下) [root@db02 system]# systemctl daemon-reload #3.system管理启动mysql [root@db02 system]# systemctl start mysql
[root@db02 system]# vim /etc/profile.d/mysql.sh export PATH=/usr/local/mysql/bin:$PATH [root@db02 system]# source /etc/profile [root@db02 system]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 ...
以下为自定义目录安装
1.源码包安装数据库(自定义安装目录)
1)上传代码包
2)安装依赖
3)解压
4)创建自定义目录
[root@db01 ~]# mkdir /service
[root@db01 ~]# cd mysql-5.6.46/ [root@db01 mysql-5.6.46]# cmake . -DCMAKE_INSTALL_PREFIX=/service/mysql-5.6.46 \ -DMYSQL_DATADIR=/service/mysql-5.6.46/data \ -DMYSQL_UNIX_ADDR=/service/mysql-5.6.46/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=system \ -DENABLED_LOCAL_INFILE=1 \ -DWITH_EMBEDDED_SERVER=1 \ -DENABLE_DOWNLOADS=1 \ -DWITH_DEBUG=0
3)编译安装
4)做软链接
[root@db01 local]# ln -s /service/mysql-5.6.46/ /service/mysql
9)拷贝配置文件
[root@db01 ~]# cd /service/mysql/support-files/ [root@db01 support-files]# cp my-default.cnf /etc/my.cnf cp: overwrite ‘/etc/my.cnf’? y [root@db01 support-files]# cp mysql.server /etc/init.d/mysqld
[root@db01 support-files]# cd /service/mysql/scripts/ [root@db01 scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data
#启动失败,查看错误日志,socket存放路径不存在,但这个路径不会自动创建 [root@db01 mysql-5.6.46]# mkdir /service/mysql-5.6.46/tmp #启动失败,查看错误日志,是权限不足 # 2024-06-05 08:09:55 32446 [ERROR] Can't start server : Bind on unix socket: Permission denied [root@db01 mysql-5.6.46]# chown -R mysql.mysql /service/mysql-5.6.46/ [root@db01 mysql-5.6.46]# /etc/init.d/mysqld start
#1.配置system管理MySQL [root@db01 system]# vim /usr/lib/systemd/system/mysql.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/service/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 #2.重新加载启动文件列表(非必要,当直接systemctl启动报错,就加载下) [root@db01 system]# systemctl daemon-reload [root@db04 system]# systemctl start mysql
1)上传代码包
2)安装依赖
3)解压
4)创建自定义目录
[root@db04 ~]# mkdir /service
[root@db04 ~]# mv mysql-5.6.46-linux-glibc2.12-x86_64/ /service/mysql-5.6.46
[root@db04 ~]# ln -s /service/mysql-5.6.46/ /service/mysql
7)创建用户
8)拷贝配置文件和启动脚本
[root@db04 ~]# cd /service/mysql/support-files/ [root@db03 support-files]# cp my-default.cnf /etc/my.cnf cp: overwrite ‘/etc/my.cnf’? y [root@db03 support-files]# cp mysql.server /etc/init.d/mysqld
[root@db03 support-files]# cd /service/mysql/scripts/ [root@db03 scripts]# ./mysql_install_db --user=mysql --basedir=/service/mysql --datadir=/service/mysql/data
#尝试启动mysql失败,报错原因: 二进制的包是已经生成编译完成的,他会去/usr/local目录下找mysql目录,所以启动失败 #解决方式: 第一种解决方式:做软链接 [root@db04 scripts]# ln -s /service/mysql-5.6.46 /usr/local/mysql 第二种解决方式:修改启动文件 [root@db04 scripts]# sed -i 's#/usr/local#/service#g' /etc/init.d/mysqld /service/mysql/bin/mysqld-safe [root@db04 scripts]# rm -rf /usr/loacl/mysql #非必要 #用第一种或者第二种都行,启动mysql [root@db04 scripts]# /etc/init.d/mysqld start
#1.配置system管理MySQL [root@db04 system]# vim /usr/lib/systemd/system/mysql.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql ExecStart=/service/mysql/bin/mysqld --defaults-file=/etc/my.cnf LimitNOFILE = 5000 #2.重新加载启动文件列表(非必要,当直接systemctl启动报错,就加载下) [root@db03 system]# systemctl daemon-reload
#1.启动mysql失败 [root@db04 system]# systemctl start mysql #2.启动失败原因: mysql目录下不止刚修改的两个地方是/usr/local,还有很多 [root@db04 service]# grep -r '/usr/local' /service/mysql/* #3.解决方式: 第一种:做软链接 [root@db04 service]# ln -s /service/mysql-5.6.46 /usr/local/mysql 第二种:修改配置文件 [root@db04 service]# vim /etc/my.cnf [mysqld] basedir=/service/mysql datadir=/service/mysql/data #4.再次启动 [root@db04 system]# systemctl start mysql