mysql概览, centos 8 上的二进制安装,源码安装,多实例安装

插播:查找最大的文件 du -s /root/* | sort -nr 一层层排查

数据库原理

关系型数据库相关概念:
关系:关系即二维表
行 row:表中的一行,也称一条记录 record
列 column:表中的一列,也称属性,字段,域filed
主键 Primary key:一个或者多个字段的组合,用于唯一确定一条记录的字段,一张表只能有一个主键,主键的值不能为NULL
唯一键 Uniqe key:一个或者多个字段的组合,用于唯一确定一条记录的字段,一张表可以有多个唯一键,唯一键的值可以为NULL
域 domain:属性的取值范围
外键 FK :表1中的某字段是表2的主键(或唯一键)

表达一对多关系的两个实体,需要设置主外键。student(stuID,SNAME,classID),class(classID,CNAME)。
表达多对多关的两个实体,为了避免数据冗余,需要引入第三张表。student(stuID,SNAME,courseID),course(courseID,coNAME,stuID)----> student(stuID,SNAME),course(courseID,coNAME),stu_course(stu_courseID,stuID,courseID)。有的时候为了查询效率,不会新增第三张表,而故意冗余。

关系数据库的范式
第一范式 1NF:无重复的列,每一列都是不可分割的基本数据项,同一列不能有多个值,实体的某个属性不能有多个值,实体不能有重复的属性

第二范式 2NF:必须满足第一范式,属性完全依赖于主键。有时为了查询效率会故意违反第二范式。

第三范式:必须满足第二范式,非主键之间不能出现依赖关系

mysql概览

三大主要分支mysql mariaDB percona server

mysql特性:
插件式存储引擎,用户可以根据需要灵活选择。mysql5.5开始,官方默认引擎为InnoDB
单进程,多线程

mysql 的四种安装

以下安装过程均在 centos 8 环境下。

包安装

使用yum安装系统自带的包。cent7 上自带的只有 mariadb,可以去 mysql 官网下载 rpm 包以配置 mysql 的 yum 仓库,然后安装。

源码编译安装mysql

写在前面:
本次安装的安装路径为 /usr/local/mysql,数据存储路径为 /data/mysql。

mysql 5.7 以上版本编译安装严重依赖 boost 库,不同版本 boost 也不同。因此下载 mysql 时最好选择下载自带boost的版本。本次安装下载使用官网下载的 mysql-boost-8.0.30.tar.gz。
以下操作,系统为 centos8,mysql 版本为mysql-8.0.30。
创建用户和组。新建文件夹 数据存储路径/data/mysql ,软件安装路径/usr/local/mysql,修改文件夹的所有者所属组为root 或者mysql。

[root@localhost-12 ~]# groupadd -r mysql
[root@localhost-12 ~]# 
[root@localhost-12 ~]# useradd -r -g mysql mysql
[root@localhost-12 ~]# 
[root@localhost-12 ~]# id mysql
uid=994(mysql) gid=991(mysql)=991(mysql)

安装依赖包。centos 8 中的软件版本较新,基本无需升级依赖。

[root@localhost-12 ~]#yum -y install ncurses ncurses-devel cmake gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils openssl-devel libtirpc-devel

cmake操作,生成makefile。参数的具体含义解释留待详细查阅mysql 文档。

#-DWITH_BOOST=./boost 路径是相对,解压后 boost 文件位于 mysql 解压的目录下)
#在此处即为/usr/local/src/mysql-8.0.30/下
[root@localhost-12 mysql-8.0.30]cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/usr/local/mysql/etc  -DSYSTEMD_PID_DIR=/usr/local/mysql -DDEFAULT_charset=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_SSL=system -DWITH_READLINE=on -DMYSQL_DATADIR=/data/mysql -DWITH_BOOST=./boost -DWITH_SYSTEMD=1 -DFORCE_INSOURCE_BUILD=1

报错
CMake Warning:
  No source or binary directory provided.  Both will be assumed to be the
  same as the current working directory, but note that this warning will
rh/gcc-toolset-11
  You need to install the required packages:
   yum install gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils

解决:
[root@localhost-12 mysql-8.0.30]# yum install gcc-toolset-11-gcc gcc-toolset-11-gcc-c++ gcc-toolset-11-binutils


再次cmake
报错: 没有合适的openssl,Not a supported openssl version in WITH_SSL=system.
Make sure you have specified a supported SSL version. 
但是,经过查看,系统自带符合要求版本的 openssl。
.........
-- ZSTD_INCLUDE_DIR /usr/local/src/mysql-8.0.30/extra/zstd/zstd-1.5.0/lib
-- ZSTD_LIBRARY zstd
-- 
Not a supported openssl version in WITH_SSL=system.
Make sure you have specified a supported SSL version. 

解决:
[root@localhost-12 mysql-8.0.30]# yum install -y openssl-devel


再次cmake
报错
-- Checking for module 'libtirpc'
--   Package 'libtirpc', required by 'virtual:world', not found
CMake Warning at cmake/rpc.cmake:40 (MESSAGE):
  Cannot find RPC development libraries.  You need to install the required
  packages:

    Debian/Ubuntu:              apt install libtirpc-dev
    RedHat/Fedora/Oracle Linux: yum install libtirpc-devel
    SuSE:                       zypper install glibc-devel
解决:
yum install -y libtirpc-devel



再次cmake
报错:
CMake Error at plugin/group_replication/libmysqlgcs/cmake/rpcgen.cmake:113 (MESSAGE):
  Could not find rpcgen
Call Stack (most recent call first):
  plugin/group_replication/libmysqlgcs/CMakeLists.txt:53 (INCLUDE)
解决:
此处尝试使用官方配置的yum源下载rpcgen,未找到相关包。此次在github上下载到软件包。
也可尝试配置其他yum仓库进行寻找。
下载rpcgen的rpm包,上传到服务器并安装,如下
[root@localhost-12 ~]# ll
总用量 325128
-rw-r--r--  1 root root     53424 210 17:27 rpcgen-1.3.1-4.el8.x86_64.rpm
[root@localhost-12 ~]# 
[root@localhost-12 ~]# rpm -Uv rpcgen-1.3.1-4.el8.x86_64.rpm 
Verifying packages...
软件包准备中...
rpcgen-1.3.1-4.el8.x86_64
[root@localhost-12 ~]# 
[root@localhost-12 ~]# yum info rpcgen
上次元数据过期检查:1:28:10 前,执行于 2024年02月10日 星期六 16时00分34秒。
已安装的软件包
名称         : rpcgen
版本         : 1.3.1
发布         : 4.el8
架构         : x86_64
......


再次执行cmake操作。
顺利完成
-- Configuring done (3.1s)
-- Generating done (2.0s)
-- Build files have been written to: /usr/local/src/mysql-8.0.30
[root@localhost-12 mysql-8.0.30]# 

cmake错误的解决参考了博文:https://blog.csdn.net/l1028386804/article/details/105508896

插曲:扩容
相传,mysql8.0以上源码编译需要40G 以上空间方能使成功率翻倍,故
需要扩容根分区(centos8)
https://blog.csdn.net/Doudou_Mylove/article/details/106614769
注意:当前系统为 centos 8 ,系统安装好后,默认根目录挂载点是 /dev/nvme0n1p2/cs-root ,因为用了LVM逻辑卷管理,根文件系统建立在卷组(VG)cs 上的逻辑卷(LV)上,逻辑卷名是 cs-root

#在VMware中,扩大硬盘容量,而后可见 nvme0n1 从 25G 变为  45G
[root@localhost-12 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 10.8G  0 rom  
nvme0n1     259:0    0   45G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
└─nvme0n1p2 259:2    0   24G  0 part 
  ├─cs-root 253:0    0   22G  0 lvm  /
  └─cs-swap 253:1    0    2G  0 lvm  [SWAP]

#使用 fdisk 在 nvme0n1 上创建新分区 nvme0n1p3 ,并将nvme0n1p3分区类型修改为8e
#得到
[root@localhost-12 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 10.8G  0 rom  
nvme0n1     259:0    0   45G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
├─nvme0n1p2 259:2    0   24G  0 part 
│ ├─cs-root 253:0    0   22G  0 lvm  /
│ └─cs-swap 253:1    0    2G  0 lvm  [SWAP]
└─nvme0n1p3 259:3    0   20G  0 part 

#将 nvme0n1p3 添加为 pv
pvcreate /dev/nvme0n1p3
#将 pv /dev/nvme0n1p3 添加到 VG cs中
vgextend cs /dev/nvme0n1p3
#扩容lvs
[root@localhost-12 ~]# lvextend -l +100%FREE /dev/cs/root 
  Size of logical volume cs/root changed from <21.97 GiB (5624 extents) to 41.96 GiB (10743 extents).
  Logical volume cs/root successfully resized.
#df -T 可以查看已挂载分区的文件系统为何,根据文件系统的类型,同步文件系统
#同步文件系统
[root@localhost-12 ~]# xfs_growfs /dev/cs/root 

#根目录扩容完成
[root@localhost-12 ~]# lsblk
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0          11:0    1 10.8G  0 rom  
nvme0n1     259:0    0   45G  0 disk 
├─nvme0n1p1 259:1    0    1G  0 part /boot
├─nvme0n1p2 259:2    0   24G  0 part 
│ ├─cs-root 253:0    0   42G  0 lvm  /
│ └─cs-swap 253:1    0    2G  0 lvm  [SWAP]
└─nvme0n1p3 259:3    0   20G  0 part 
  └─cs-root 253:0    0   42G  0 lvm  /

编译安装

#查看内核数
[root@localhost-12 ~]grep processor /proc/cpuinfo | wc -l
4
#编译安装
[root@localhost-12 mysql-8.0.30]# pwd
/usr/local/src/mysql-8.0.30
[root@localhost-12 mysql-8.0.30]# make -j 4 && make install

...........1个小时以后编译安装完成..........

将安装路径下的二进制命令添加到PATH变量

[root@localhost-12 ~]# echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
[root@localhost-12 ~]# 
[root@localhost-12 ~]# . /etc/profile.d/mysql.sh 
[root@localhost-12 ~]# 
[root@localhost-12 ~]# echo $PATH
/usr/local/mysql/bin:/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost-12 ~]# 

准备配置文件。此处存疑,我在 mysql 的安装目录始终没有找到合适的 defaults cnf。于是只好从另一台二进制安装好mysql的机器复制了一份 /etc/my.cnf 文件到 /etc/my.cnf用作配置文件。注意配置文件中的路径需要与安装路径,数据路径一致。

[mysqld]
server-id=1
port=3306
#mysql安装根目
basedir=/usr/local/mysql
#mysql数据文件所在位置
datadir=/data/mysql
#pid
pid-file=/data/mysql/mysqld.pid
#设置socket文件所在目录
socket=/data/mysql/mysql.sock
# 用户
user=mysql
# 允许访问的IP网段
bind-address=0.0.0.0
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server=utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci
#最大连接数
max_connections=400
#最大错误连接数
max_connect_errors=1000
#数据库错误日志文件
log-error=/data/mysql/mysql.log
[client]
socket=/data/mysql/mysql.sock

创建 mysql 初始化数据

[root@localhost-12 ~]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql 
[root@localhost-12 ~]# 

准备service文件。
与二进制安装过程中的准备service文件步骤不同,这里自带了 mysql 的 service 文件,因此可以直接将 mysql 的 service 文件复制为 /usr/lib/systemd/system/mysqld 供 systemd 使用。

#在安装目录下,找到陪嫁的 mysql service 文件
[root@localhost-12 mysql]# find -name mysql*.service
./usr/lib/systemd/system/mysqld.service
./usr/lib/systemd/system/mysqld@.service
./usr/lib/systemd/system/mysqlrouter.service
[root@localhost-12 mysql]# 
[root@localhost-12 ~]# cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service  /usr/lib/systemd/system/
[root@localhost-12 ~]#systemctl daemon-reload 
[root@localhost-12 system]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html

启动mysqld服务

[root@localhost-12 system]# systemctl start mysqld
[root@localhost-12 system]# 
[root@localhost-12 system]# systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
   Active: active (running) since Mon 2024-02-12 17:02:18 CST; 8s ago
     Docs: man:mysqld(8)

#连接数据库
[root@localhost-12 ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
......
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

二进制安装

不需要编译,使用官方编译好的二进制包,但需要自己配置。
图
配置文件包括了mysql的一些配置项,指定了mysql 数据文件的存储路径。
/usr/local/mysql 中包含了mysql 的二进制命令和支持文档
mysql 数据文件存储了mysql 启动所需的原始数据,也将存储以后的生产数据库文件。

mysql 5.7和8.0 版本的二进制安装过程。
创建用户和组

#添加mysql组和用户
[root@localhost-10 ~]# groupadd -r mysql
[root@localhost-10 ~]# useradd -r -g mysql mysql
[root@localhost-10 ~]# 
[root@localhost-10 ~]# id mysql
uid=994(mysql) gid=991(mysql)=991(mysql)
[root@localhost-10 ~]# 

下载二进制包,官网或者国内镜像网站,64位,linux-generic,本次安装选择 : mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
下载完解压缩到目录:/usr/local 中。注意,必须为此目录,因为官方在编译时指定了 prefix为此。
创建软链接。
修改权限。

#解压
[root@localhost-10 ~]# tar -xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz -C /usr/local
#创建软链接,简化操作
[root@localhost-10 local]# cd /usr/local
[root@localhost-10 local]# ln -sv mysql-8.0.36-linux-glibc2.28-x86_64  mysql
'mysql' -> 'mysql-8.0.36-linux-glibc2.28-x86_64'
[root@localhost-10 local]# 
#修改目录权限
[root@localhost-10 local]# chown -R root:root /usr/local/mysql/
[root@localhost-10 local]# 

准备 mysql 配置文件。mysql 中包含两个部分:mysql 软件的配置文件和 mysql 的数据文件,需要在配置文件中指定各种数据文件的路径。在本次的安装中,mysql的数据文件统一被要求存放在 /data/mysql 目录中。

[mysqld]
server-id=1
port=3306
#mysql安装根目
basedir=/usr/local/mysql
#mysql数据文件所在位置
datadir=/data/mysql
#pid
pid-file=/data/mysql/mysqld.pid
#设置socket文件所在目录
socket=/data/mysql/mysql.sock
#设置临时目录
#tmpdir=/tmp

# 用户
user=mysql
# 允许访问的IP网段
bind-address=0.0.0.0

#跳过密码登录
#skip-grant-tables

#指定数据库日志文件存放路径
log-error=/data/mysql/mysql.log

#只能用IP地址检查客户端的登录,不用主机名
skip_name_resolve=1

#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server=utf8mb4

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8mb4_general_ci

#最大连接数
max_connections=400

#最大错误连接数
max_connect_errors=1000

#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
#skip-external-locking

#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
#transaction_isolation=READ-COMMITTED

#设置client连接mysql时的字符集,防止乱码
#init_connect='SET NAMES utf8mb4'

#是否对sql语句大小写敏感,1表示不敏感
#lower_case_table_names=1

#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
#explicit_defaults_for_timestamp=true

#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
#max_allowed_packet=128M

#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
#interactive_timeout=1800
#wait_timeout=1800

#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
#tmp_table_size=134217728
#max_heap_table_size=134217728

#禁用mysql的缓存查询结果集功能
#后期根据业务情况测试决定是否开启
#大部分情况下关闭下面两项
#query_cache_size = 0
#query_cache_type = 0
 
#慢查询sql日志设置
#slow_query_log=1
#slow_query_log_file=/var/log/mysqld_slow.log

#检查未使用到索引的sql
#log_queries_not_using_indexes=1

#针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
#log_throttle_queries_not_using_indexes=5

#作为从库时生效,从库复制中如何有慢sql也将被记录
#log_slow_slave_statements=1

#慢查询执行的秒数,必须达到此值可被记录
#long_query_time=8

#检索的行数必须达到此值才可被记为慢查询
#min_examined_row_limit=100

#mysql binlog日志文件保存的过期时间,过期后自动删除
#expire_logs_days=5
#binlog_expire_logs_seconds=604800

[client]
socket=/data/mysql/mysql.sock

准备环境变量path。将mysql等命令的路径加入path变量。

[root@localhost-10 profile.d]# echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
[root@localhost-10 profile.d]# . /etc/profile.d/mysql.sh 

初始化数据库文件并提取root密码。
使用 mysqld 命令初始化数据库文件,这些数据库文件包括 mysql 的一些原始的数据库,认证文件,socket文件等,是mysql 启动所需的原始数据。在这个过程同时会生成最初始的 root密码。如果在配置文件(/etc/my.cnf)中 未 开启 skip-grant-tables ,连接数据库时必须要输入这个初始密码,并且这个初始密码只在第一次登陆时有效,随后会过期。如果,在初始化数据库文件这个过程中没有显示出密码,可以在 my.cnf 文件中指定的 mysql 日志文件路径下查看 mysql 的日志文件,查看密码。

#初始化的同时生成随机密码
[root@localhost-10 ~]# mysqld --initialize --user=mysql --datadir=/data/mysql
#也可以在初始化的同时生成空密码
[root@localhost-10 ~]# mysqld --initialize-insecure --user=mysql --datadir=/data/mysql

#日志中查看密码,本次安装日志文件存放在 /data/mysql/mysql.log
[root@localhost-10 ~]# cat  /data/mysql/mysql.log |grep password
2024-02-08T01:10:56.046060Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ?EquiXNWA7NF

准备服务脚本文件,启动 mysql 服务。

#准备服务脚本       
[root@localhost-10 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost-10 ~]# chkconfig --add mysqld

#启动 mysql 服务
[root@localhost-10 ~]# systemctl start mysqld
[root@localhost-10 ~]# systemctl status mysqld
● mysqld.service - LSB: start and stop MySQL
   Loaded: loaded (/etc/rc.d/init.d/mysqld; generated)
   Active: active (running) since Wed 2024-02-07 13:49:21 CST; 9s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 10901 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)
    Tasks: 39 (limit: 12198)
   Memory: 356.9M
   CGroup: /system.slice/mysqld.service
jtfaybtsj8*S

启动 mysql 时的一些报错:
1.The server quit without updating PID file
解决办法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld。
2.无法加载 libtinfo.so.5
解决办法:创建了软连接 ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

修改口令(生成的随机密码只适用与第一次登录)

#使用初始密码登录后执行
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123465';

#或者使用命令mysqladmin,将初始密码修改为 123465
[root@localhost-10 ~]mysqladmin -uroot -p ?EquiXNWA7NF password 123465

一键实现二进制安装的脚本。(待完善)

#!/bin/bash
#MySQL Download URL: https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
#http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
#http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz

. /etc/init.d/functions 
SRC_DIR=`pwd`

MYSQL='mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz'
#MYSQL='mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz'
MYSQL_ROOT_PASSWORD=123465

COLOR='echo -e \E[01;31m'
END='\E[0m'

check (){

if [ $UID -ne 0 ]; then
  action "当前用户不是root,安装失败" false
  exit 1
fi

cd  $SRC_DIR


if [ !  -e $MYSQL ];then
        $COLOR"缺少${MYSQL}文件"$END
		$COLOR"请将相关软件放在${SRC_DIR}目录下"$END
        exit
elif [ -e /usr/local/mysql ];then
        action "数据库已存在,安装失败" false
        exit
else
	return
fi
} 

install_mysql(){
    $COLOR"开始安装MySQL数据库..."$END
    yum  -y -q install libaio numactl-libs
    tar xf $MYSQL -C /usr/local/
    MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`
    ln -s  /usr/local/$MYSQL_DIR /usr/local/mysql
    chown -R  root.root /usr/local/mysql/
    id mysql &> /dev/null || { useradd -s /sbin/nologin -r  mysql ; action "创建mysql用户"; }
        
    echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
    .  /etc/profile.d/mysql.sh
	ln -s /usr/local/mysql/bin/* /usr/bin/
    cat > /etc/my.cnf <<-EOF
[mysqld]
server-id=`hostname -I|cut -d. -f4`
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock                                                                                                   
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
    [ -d /data ] || mkdir /data
	mysqld --initialize-insecure --user=mysql --datadir=/data/mysql 
    cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig mysqld on
    service mysqld start
    [ $? -ne 0 ] && { $COLOR"数据库启动失败,退出!"$END;exit; }
    #MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}' /data/mysql/mysql.log`
    #mysqladmin  -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD &>/dev/null
	sleep 3
    mysqladmin  -uroot  password $MYSQL_ROOT_PASSWORD &>/dev/null
    action "数据库安装完成" 
}

check

install_mysql

5.6 5.7的二进制安装有区别:
初始化的命令有区别。如果使用到,请详查。

mysql的多实例安装

两种多实例的实现:1.安装一次mysql软件,分成两个实例;2.安装两个(不同版本或者相同版本)mysql,实现一台主机两个实例。

实现第2种多实例
创建3个实例的目录

安全加固和常用命令,常用设置

安装好服务端后,会自动安装客户端,并提供客户端命令。使用 mysql -u username -p password 将会自动连接到本机的 mysql 服务端。mysql 的用户名格式为 username@host ,@host 为主机控制,意为 username 这个用户只能在 host 这台主机上连接此数据库。username@192.168.100.% 意为username只能从100 这个网段的主机连接数据库。安装会默认自带创建的用户名 root@localhos。

安全加固
mysql -u root -p 登录数据库 yum默认安装无密码,不安全
较低版本中默认安装完有多个无用户名的用户 select * from mysql.user 匿名账号 可以匹配任何用户名;较低版本保留有test数据库,任何人可以访问;上述情况使得 mysql 存在安全风险,系统提供了安全加固脚本,mysql_secure_installation,运行完删除test,设置root密码,删除匿名账户,禁用root账号远程登录。
较高版本解决了这些安全风险,只需添加root密码即可。

基本常用客户端工具

mysql> help
clear     (\c) Clear the current input statement.
exit      (\q) Exit mysql. Same as quit.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.

连接mysql的常用选项

mysql -uroot -p 123456
-h :指定要连接的主机
-p :指定端口号
-s :指定要使用的sock文件
-d :指定要登录的数据库
-e :-e 'SQL' 
< :支持标准输入输出,因此支持重定向,管道符输入
# mysql -uroot -p xxx << xxx.sql

安装好服务端后,用客户端连接本机的服务端,使用的是本地的 socket 通信方式,status 工具可以查看到使用的sock文件: UNIX socket: /var/lib/mysql/mysql.sock

修改 mysql 连接数据库后的默认提示符
默认为

mysql> 

并不显示当前所在的数据库以及登录的用户名
可以修改 prompt 参数,修改方式有多种,可以将 prompt=“(\u@\h) [\d]>” 写入配置文件 /etc/my.cnf.d/client.cnf。修改后提示符

root@localhost [(none)]>
root@localhost [(none)]>use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
root@localhost [mysql]>

主机与数据库与表的关系
一台主机可以安装多个数据库实例,相当于安装了多个mysql,一般只在测试环境这么做,多个实例同时存在时,端口号不能相同
在这里插入图片描述
客户端的部分数据库管理命令

mysqladmin -uroot
ping :探测数据是否alive
creat :创建一个数据库
drop :数据库
passwd :修改密码
status :显示mysql当前线程,负载等状态信息
[root@localhost-10 ~]# mysqladmin status
Uptime: 2566  Threads: 2  Questions: 17  Slow queries: 0  Opens: 155  Flush tables: 3  Open tables: 74  Queries per second avg: 0.006

服务端的配置文件
/etc/my.cnf
/etc/my.cnf.d/
~/.my.cnf
三个路径均为配置文件,三处的配置文件起相同的作用。建议统一在一处位置修改参数。

修改配置文件关闭来自网络的连接

[root@localhost-10 my.cnf.d]# pwd
/etc/my.cnf.d

[root@localhost-10 my.cnf.d]# ll
总用量 12
-rw-r--r-- 1 root root 316 22 04:37 client.cnf
-rw-r--r-- 1 root root 565 92 2021 mysql-default-authentication-plugin.cnf
-rw-r--r-- 1 root root 612 92 2021 mysql-server.cnf

#在服务端配置文件mysql-server.cnf中的[mysqld]下新增
skip-networking=1

#重启mysqld

ss -ntlp 
#可见,mysql的端口(3306)已被关闭

修改配置文件开启5.7版本的远程的连接。
mysql5.7版本似乎默认不允许远程连接,需要在配置文件中找到 配置行
bind-address 127.0.0.1 注释掉,或者将127.0.0.1 修改为0.0.0.0。

  • 33
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值