MySQL   发布时间:2022-05-15  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了01 . Mysql简介及部署大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_866_0@mysqL数据库简介
什么是数据?
什么是数据库?
数据库技术构成
数据库系统主要三个部分
# ODBC:(open database connectivity) 开放数据库互联。技术为访问不同的sql数据库提供了一个共同的接口。

# JDBC:(java data base connectivity)java数据库连接,用于java应用程序连接标准方法。

# ADO.NET:是微软在.NET 框架下开发设计的一组用于 和数据源进行交互的 面向对象 类库。

# PDO:(@R_262_11161@ data object) 为@R_262_11161@访问数据定义了一个轻量级、一致性的接口。它提供了一个数据访问抽象层,

数据库分类

关系型数据库

库中有表,几个表之间有关联的,拥有共同的列,称之为关系型数据库

Oracle						# 1521
DB2							# 5000
MysqL,Mariadb				# 3306
sqlServer					# 1433
非关系型数据库

通常是以Key-value形式存储的,不支持sql语句,没有表结构,配置简单,低廉学习成本,能很好作为MysqL中间层:

# 1. 键值存储:  redis<6379>  Memcached<11211>,因为相比其他数据存储没有数据结构,又工作在内存中,所以性能很高.
# 2. 列式存储:  HBase:
# 3. 文档存储:  Documentation,MongoDB<27017>

分布式数据库: 通过分片机制进行数据分布,每个节点都能接收客户端请求<去中心化>,并且持有全局元数据的一部分数据.

# Hadoop(HDFS):  适用于大文件存储,Apache公司的产品,java程序编写
# FastDFS(开源软件): 适用于小文件存储(网盘,短视频,images),对于高并发有很好的支持.

E-R模型

# 当前物理的数据库都是按照E-R模型进行设计的

# E表示entry,实体
# R表示relationship,关系
# 一个实体转换为数据库中的一个表
# 关系描述两个实体之间的对应规则(关系),包括

一对一

角色表中的一条数据 对应 员工表中 的一条员工的数据

roles角色表

id role
1 ceo

staffs员工表

id name role_id
1 雷军 1

一对多

一个班级表的一条数据可以对应学生表中多条数据

id class
1 高三一班
2 高三二班
id name class_id
1 youmen 1
2 alice 2
3 flying 2

多对一

一个老师可以教授多个班级,一个班级可以有多个老师。

此时,就需要三个表

# 1. 老师表
# 2. 班级表
# 3. 用来表示他们关系的表

这个第三张表就是多对多关系需要的表

teacher表

id name
1 晗哥
2 西瓜甜

class表

id name
1 云计算1810
2 云计算1809
3 云计算1808

teacher2class表

id teacher_id class_id
1 1 1
2 1 3
3 2 1
4 2 2

关系点表示被转换为数据库表中的一个列 ,在关系型数据库中一行就是一个对象

RDBMS

@H_321_310@mysqL5.7主要特性
# 更好的性能:对于多核cpu、固态硬盘、锁有着更好的优化,每秒100W QPS已不再是MysqL的追求,下个版本能否上200W QPS才是吾等用户更关心的
# 更好的InnoDB存储引擎
# 更为健壮的复制功能:复制带来了数据完全不丢失的方案,传统金融客户也可以选择使用MysqL数据库。此外,GTID在线平滑升级也变得可能
# 更好的优化器:优化器代码重构的意义将在这个版本及以后的版本中带来巨大的改进,Oracle官方正在解决MysqL之前最大的难题
# 原生JSON类型的支持
# 更好的地理信息@R_306_10580@:InnoDB原生支持地理位置类型,支持GeoJSON,GeoHash特性
# 新增sys库:以后这会是DBA访问最频繁的库
QPS

Queries Per Second意思是每秒查询率,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。

sql介绍

# sql语言主要用于存取数据,查询数据,更新数据和管理关系数据库系统,由IBM开发,分为四种类型
# DDL语句        数据库定义语言(Create,Alter,Drop,DeclarE)  
# 用于定义或改变表的结构,数据类型,表之间的连接和约束等初始化工作上,他们大多在建表时使用.

# DML语句       数据库操作语言(SELEct,delete,update,Insert)    # 用来对数据库里的数据进行操作的语言.

# DCL语句        数据库控制语言(GRANT,REVOKE,COMMIT,ROLLBACK)  
# 用来设置或更改数据库或角色权限的语句,只有sysadmin,dbcreator,db_owner等人员才能执行.

# DQL语句        数据库查询语言(SELEct)

字符集

查看目前MysqL所支持的所有字符集
SHOW CHaraCTER SET;
SHOW CHaraCTER SET LIKE 'laTin%';
查看默认字符集
show variables like 'collation_%';

show variables like 'character_set_%';

# 查看具体某个数据库的字符集
use db_name
SELECT @@character_set_database,@@collation_database;
# 或者
use db_name
status
配置文件设置字符集
[client]
# 其他客户端,比如 pymysqL
default-character-set=utf8
[MysqL]
# MysqL 客户端
default-character-set=utf8
[MysqLd]
# 服务器端的字符集
character-set-server = utf8

# 服务器端的排序规则
collation-server = utf8_unicode_ci
排序规则
SHOW COLLATION WHERE Charset = 'laTin1';

后缀含义

后缀 含义
_ci 不区分大小写
_cs 区分大小写
@H_984_387@mysqL> SELECT * FROM perfoRMANce_scheR_426_11845@a.session_variables
WHERE VARIABLE_NAME IN (
'character_set_client','character_set_connection','character_set_results','collation_connection'
) ORDER BY VARIABLE_NAME;
@H_153_390@mysqLRPM安装
#!/usr/bin/env bash
# Author: ZhouJian
# Mail: 18621048481@163.com
# Time: 2019-9-3
# Describe: CentOS 7 Install Mysql.rpm Script
clear
echo -ne "\\033[0;33m"
cat<<EOT
                                  _oo0oo_
                                 088888880
                                 88" . "88
                                 (| -_- |)
                                  0\\ = /0
                               ___/'---'\\___
                             .' \\\\\\\\|     |// '.
                            / \\\\\\\\|||  :  |||// \\\\
                           /_ ||||| -:- |||||- \\\\
                          |   | \\\\\\\\\\\\  -  /// |   |
                          | \\_|  ''\\---/''  |_/ |
                          \\  .-\\__  '-'  __/-.  /
                        ___'. .'  /--.--\\  '. .'___
                     ."" '<  '.___\\_<|>_/___.' >'  "".
                    | | : '-  \\'.;'\\ _ /';.'/ - ' : | |
                    \\  \\ '_.   \\_ __\\ /__ _/   .-' /  /
                ====='-.____'.___ \\_____/___.-'____.-'=====
                                  '=---='
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                建议系统                    CentOS7
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# PS:请尽量使用纯净的CentOS7系统,我们会在服务器安装MysqL5.7,# 将MysqL-5.7.23-1.el7.x86_64.rpm-bundle.tar包和脚本放到root目录下执行即可,密码为ZHOUjian.20
EOT
echo -ne "\\033[m"
init_security() {
systemctl stop firewalld
systemctl disable firewalld &>/dev/null
setenforce 0
sed -i '/^SELINUX=/ s/enforcing/disabled/'  /etc/selinux/config
sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#UsednS/ {s/^#//;s/yes/no/}' /etc/ssh/sshd_config
systemctl enable sshd crond &> /dev/null
echo -e "\033[32m [安全配置] ==> OK \033[0m"
}
init_yum@R_450_9016@e() {
if [ ! -d /etc/yum.repos.d/BACkup ];then
    mkdir /etc/yum.repos.d/BACkup
fi
mv /etc/yum.repos.d/* /etc/yum.repos.d/BACkup 2>/dev/null

if ! ping -c2 www.baidu.com &>/dev/null    
then
    echo "您无法上外网,不能配置yum源"
    exit    
fi
curl -o /etc/yum.repos.d/163.repo http://mirrors.163.com/.Help/CentOS7-Base-163.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
timedatectl set-timezone Asia/Shanghai
echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
chattr +i /etc/resolv.conf


echo -e "\033[32m [YUM @R_450_9016@e] ==> OK \033[0m"
}
init_MysqL() {
rpm -e mariadb-libs --nodeps
rm -rf /var/lib/MysqL
rm -rf /etc/my.cnf
tar xvf /root/MysqL-5.7.23-1.el7.x86_64.rpm-bundle.tar -C /usr/local/
cd /usr/local
rpm -ivh MysqL-community-server-5.7.23-1.el7.x86_64.rpm \
MysqL-community-client-5.7.23-1.el7.x86_64.rpm \
MysqL-community-common-5.7.23-1.el7.x86_64.rpm \
MysqL-community-libs-5.7.23-1.el7.x86_64.rpm 
rm -rf MysqL-community-* 
}
changepass() {
sed -i '/\[MysqLd]/ a skip-grant-tables' /etc/my.cnf
systemctl restart MysqLd
MysqL <<EOF
        update Mysql.user set authentication_String='' where user='root' and Host='localhost';
        flush privileges;
EOF
sed -i '/skip-grant/d' /etc/my.cnf
systemctl restart MysqLd
yum -y install expect 

expect <<-EOF
spawn  MysqLadmin -uroot -p password "ZHOUjian.20"
        expect {
                "password" { send "\r"  }
}
        expect eof
EOF
systemctl restart MysqLd
}
main() {
init_hostname
init_security
init_yum@R_450_9016@e
init_MysqL
changepass
}
main

修改MysqL密码

# 修改MysqL密码下面有三种办法
# 1.刚安装好的MysqL,可以从/var/log/MysqLd.log获取临时密码
grep  "password"  /var/log/MysqLd.log   
        [root@mysqL ~]# MysqL -uroot -p
    Enter password:
    MysqL> ALTER USER 'root'@'localhost' IDENTIFIED BY 'ZHOUjian.22';

# 2.MysqLadmin -uroot -p password "Baidu.123.com"
    Enter password:

# 3.实验环境不知道root密码操作方法如下
sed -i '/\[MysqLd]/ a skip-grant-tables' /etc/my.cnf
systemctl restart MysqLd
MysqL <<EOF
        update Mysql.user set authentication_String='' where user='root' and Host='localhost';
        flush privileges;
EOF
sed -i '/skip-grant/d' /etc/my.cnf
systemctl restart MysqLd
MysqLadmin -uroot -p password "ZHOUjian.20"
Enter password:              # 此处回车一下即可

# 4.mariadb修改密码  
use MysqL  
updatE user SET password=password('ZHOUjian.20') WHERE user='root';  
MariaDB [MysqL]> flush privileges;

# 如果嫌登陆MysqL输入密码麻烦,可以使用以下办法,只需要MysqL就可以进入数据库
vim /etc/my.cnf
[client]
password=admin
user=root
systemctl restart MysqLd Or mariadb

修改用户密码

ALTER USER

# 基本使用
ALTER USER shark@'localhost' IDENTIFIED BY '123456';

# 修改当前登录用户
ALTER USER USER() IDENTIFIED BY '123456';


# 使密码过期
ALTER USER shark@'localhost' IDENTIFIED BY '123456' passworD EXPIRE;

# 使密码从不过期
ALTER USER shark@'localhost' IDENTIFIED BY '123456' passworD EXPIRE NEVER;


# 按默认设置过期时间
ALTER USER shark@'localhost'  IDENTIFIED BY '123456' passworD EXPIRE DEFAULT;

# 指定过期间隔
ALTER USER shark@'localhost' IDENTIFIED BY '123456' passworD EXPIRE intERVAL 90 DAY;
@H_800_412@mysqL8.0修改密码
# 1. 需要先创建新的用户

CREATE USER '你的用户名'@'localhost' IDENTIFIED BY '你的密码';

# 2. 把刚刚创建的数据库的管理权限给予刚刚创建的MysqL用户
GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的用户名'@'localhost';

# 3. 最后别忘了刷新权限,使用设置及时生效
FLUSH PRIVILEGES;

@H_202_418@mysql.tar包方式安装安装
# 安装源码MysqL
#!/usr/bin/env bash
# Author: ZhouJian
# Mail: 18621048481@163.com
# Time: 2019-9-3
# Describe: CentOS 7 Install Mysql.tar Script    # 此处为编译好的tar包,具体编译有时间再亲测一遍
Deplay(){
rpm -e mariadb-libs --nodeps
setenforce 0
systemctl stop firewalld
systemctl enable firewalld
sed -i '/^SELINUX=/ s/enforcing/disabled' /etc/ssh/sshd_config
sed -i '/^GSSAPIAu/ s/yes/no/' /etc/ssh/sshd_config
sed -i '/^#UsednS/ {s/^#//;s/yes/no}' /etc/ssh/sshd_config

id MysqL > /dev/null
if [ $? -eq 0 ];then
echo "MysqL user exist"
else
groupadd MysqL
useradd -M -s /sbin/nologin MysqL -g MysqL
fi
if [ ! -d /usr/local/MysqLd ];then
	tar xf MysqL-5.7.26-bin.tar.xz -C /usr/local/
	chown Mysql.MysqL /usr/local/MysqLd/ -R
fi
echo "export PATH=$PATH:/usr/local/MysqLd/MysqL/bin" >> /etc/profile
@R_450_9016@e /etc/profile
cat > /etc/my.cnf <<EOF
[MysqLd]
basedir = /usr/local/MysqLd/MysqL
datadir = /usr/local/MysqLd/data
tmpdir = /usr/local/MysqLd/tmp
socket = /usr/local/MysqLd/tmp/Mysql.sock
pid_file = /usr/local/MysqLd/tmp/MysqLd.pid
log_error = /usr/local/MysqLd/log/MysqL_error.log
slow_query_log_file = /usr/local/MysqLd/log/slow_warn.log
user = MysqL
port = 3306
bind-address = 0.0.0.0
character-set-server = utf8
default_storage_ENGIne = InnoDB
EOF

ln -s /usr/local/MysqLd/MysqL/support-files/Mysql.server /usr/bin/MysqLdctl
MysqLdctl start
	ln -s /usr/local/MysqLd/tmp/Mysql.sock /tmp/Mysql.sock
MysqLdctl restart
sed -i '/\[MysqLd]/ a skip-grant-tables' /etc/my.cnf
MysqLdctl restart
MysqL <<EOF
	update Mysql.user set authentication_String='' where user='root' and Host='localhost';
flush privileges;
EOF
sed -i '/skip-grant/d' /etc/my.cnf
MysqLdctl restart
yum -y install expect 
expect <<-EOF
spawn MysqLadmin -uroot -p password "ZHOUjian.20"
expect {
"password" { send "\r" }
}
expect eof
EOF
	MysqLdctl restart
}
Deplay
@H_419_506@YUM部署MysqL
wget http://dev.Mysql.com/get/MysqL57-community-release-el7-8.noarch.rpm
yum -y localinstall MysqL57-community-release-el7-8.noarch.rpm
yum install MysqL-community-server -y
systemctl start MysqLd
grep 'temporary password' /var/log/MysqLd.log
MysqL -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'ZHOUjian.22';

grant all privileges on *.* to admin@"%" identified by 'ZHOUjian.21' withth grant option;

# 授权test用户有testdb数据库某一部分权限
grant SELEct,update on testDB.* to test@'%' identified by 'ZHOUjian.22';

# 授权test用户拥有所有数据库所有权限
grant all on *.* to 'test'@'%' identified by 'ZHOUjian.22';
flush privileges;
@H_785_428@mysqL源码部署
卸载MysqL冲突包并安装依赖包
rpm -e --nodeps mariadb-libs
yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison bison-devel

# cmake:
#    由于从 MysqL5.5 版本开始弃用了常规的 configure 编译方法,所以需要 CMake 编译器,用于设置 MysqL 的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等。   

# Boost:
#     从 MysqL 5.7.5 开始 Boost 库是必需的,MysqL 源码中用到了 C++的 Boost 库,要求必须安装 boost1.59.0 或以上版本,这个选择源码安装

# GCC:
#     是 Linux 下的 C 语言编译工具,MysqL 源码编译完全由 C 和 C++编写,要求必须安装GCC    

# bison:
#     Linux 下 C/C++语法分析器    

# ncurses:
#     字符终端处理库
下载源码
wget https://dev.Mysql.com/get/Downloads/MysqL-5.7/MysqL-5.7.25.tar.gz
  
wget http://@R_450_9016@eforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
创建目录用户
useradd -M -s /sbin/nologin MysqL
# -M  不@R_7_10589@的家目录
# -s  指定一个不能登录的 sHell

# 创建安装目录并授权
mkdir -p /MysqL/data
chown -R   MysqL:MysqL   /usr/local/MysqL
chown -R   Mysql.MysqL   /MysqL/data
chmod 750  /MysqL/data
解压和预编译
tar xzf boost_1_59_0.tar.gz
tar xzf MysqL-5.7.25.tar.gz

cd MysqL-5.7.25

cmake . -DCMAKE_INSTall_PREFIX=/usr/local/MysqL \
-DMysqL_DATADIR=/MysqL/data \
-DWITH_BOOST=../boost_1_59_0 \
-DSYSconfdIR=/etc \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMbedDED_SERVER=1

# 编译安装
make -j  $(grep processor /proc/cpuinfo | wc -l)
make install
添加环境变量
echo -e '\n\nexport PATH=/usr/local/MysqL/bin:$PATH\n' >> /etc/profile && @R_450_9016@e /etc/profile

添加MysqL服务到systemd
cp /usr/local/MysqL/support-files/Mysql.server   /etc/init.d/MysqLd

# 授予可执行的权限
chmod +x /etc/init.d/MysqLd

# 设置开机自启动
systemctl enable MysqLd
修改配置文件
cat /etc/my.cnf
[MysqLd]
basedir=/usr/local/MysqL
datadir=/MysqL/data
port=3306
server_id=111
socket=/tmp/Mysql.sock


# 下面的只是配置文件解释
[client]
default-character-set=utf8mb4

[MysqL]
default-character-set=utf8mb4

[MysqLd]
################ basic setTings ################
bind-address = 0.0.0.0
pid-file = /var/run/Mysql.pid
user = MysqL

character_set_server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 如果是 OFF 或(0),MysqLd 在检查客户端连接时解析主机名。
# 如果是 ON 或(1),MysqLd只使用 IP; 
skip_name_resolve = 1

max_allowed_packet = 16777216

# 允许的最大同时客户端连接数。默认情况下,这是151
max_connections = 2000

# 运行错误连接后尝试的次数,默认 100
max_connect_errors = 1000
explicit_defaults_for_timestamp = 1
join_buffer_size = 134217728

# 交互式客户端连接后,没有任何操作的情况下,继续保持连接状态的秒数
interactive_timeout = 1800

# 服务器在关闭之前等待非交互式连接上的活动的秒数。
wait_timeout = 1800
read_buffer_size = 16777216
read_rnd_buffer_size = 33554432
sorT_Buffer_size = 33554432
key_buffer_size = 256M
transaction_isolation = READ-COMMITTED

############ log setTings ############
log_error=/tmp/MysqLd.log
expire_logs_days = 30
slow_query_log = 1
long_query_time = 2

# 在写入慢查询日志的语句中包含慢速管理语句
log_slow_admin_statements = 1

# 检查少于此行数的查询结果不会记录到慢查询日志中。
min_examined_row_limit = 100

########### innodb setTings ##########
innodb_buffer_pool_size = 1G
innodb_sorT_Buffer_size = 27108864
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lock_wait_timeout = 5
innodb_flush_method = O_DIRECT
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_thread_concurrency = 8
innodb_flush_neighbors = 1
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_print_all_deadlocks = 1
innodb_Strict_mode = 1
innodb_file_per_table = ON
innodb_log_file_size = 500M
innodb_log_buffer_size = 20M
innodb_log_files_in_group = 3
innodb_flush_log_at_trx_commit=2
初始化数据库
@H_394_11@mysqLd  --initialize  --user=MysqL

--initialize-insecur   
# 使用空密码。你应该在生产中及时修改密码。
# 或者使用  --initialize  
# 这样的话,会为root用户生成一个随机的密码。这个随机密码可能会被输出到初始化过程中,也有可能输出到错误日志中。
初始化服务
systemctl  start  MysqL

# 因为使用了--initialize,所以如果登录不知道密码可以查看服务器日志
MysqL -u root -p
# 如果找不到密码,可以强制修改
sed -i '/\[MysqLd]/ a skip-grant-tables' /etc/my.cnf
systemctl restart MysqLd
MysqL <<EOF
        update Mysql.user set authentication_String='' where user='root' and Host='localhost';
        flush privileges;
EOF
sed -i '/skip-grant/d' /etc/my.cnf
systemctl restart MysqLd
MysqLadmin -uroot -p password "ZHOUjian.20"
Enter password:              # 此处回车一下即可

# 使用ALTER语句修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

# 登录数据库
MysqL -uroot -skip-password

# 使用ALTER语句修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';

授权root用户才能本地访问数据库
# 登录到 `MysqL` 数据库,执行如下语句进行授权。

CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';

# 上面的这两条语句也可以放在一个普通文件中,初始化的时候使用 `--init-file` 选项来完成。
# 例如: `--init-file=/path/MysqL-init.txt`

将MysqL动态链接库共享至系统链接库
#一般MysqL数据库还会被类似于PHP等服务调用,所以我们需要将MysqL编译后的lib库文件添加至当
# 前Linux主机链接库/etc/ld.so.conf.d/ 下,这样MysqL服务就可以被其它服务调用了。

# ldconfig -v|grep MysqL
# echo "/usr/local/MysqL/lib" > /etc/ld.so.conf.d/Mysql.conf
# ldconfig -v |grep MysqL
ldconfig: 无法对 /libx32 进行 stat 操作: 没有那个文件或目录
ldconfig: 多次给出路径“/usr/lib”
ldconfig: 多次给出路径“/usr/lib64”
ldconfig: 无法对 /usr/libx32 进行 stat 操作: 没有那个文件或目录
/usr/local/MysqL/lib:
	libMysqLclient.so.20 -> libMysqLclient.so.20.3.10

大佬总结

以上是大佬教程为你收集整理的01 . Mysql简介及部署全部内容,希望文章能够帮你解决01 . Mysql简介及部署所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。