Mysql(一)

Mysql(一)

0.前言

  运维人,运维魂,mysql弄不好脑壳痛,废话不多说,直接进行mysql数据库的编译安装,这里由于mysql的5.7版本的使用与稳定,因此选择5.7版本的mysql进行编译安装。

1.环境查看

  首先查看下基础环境的情况。

1
cat /etc/redhat-release

  这里需要涉及到查看每一个相关的库(cmake、ncurses、boost、m4、bsion)是否安装,可以使用命令进行判断

1
rpm -qa | grep ncurses

  可以看到我们仅有其中的两个库,那就安装其他没有的库(不管了,直接乱棍打死,全部装一遍)

1
sudo yum install -y cmake gcc-c++ ncurses-devel bison openssl-devel libaio-devel

2.编译安装

  下载 mysql-5.7.18.tar.gz

1
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24.tar.gz

  首先我们需要创建一个用于运行Mysql的用户组

1
2
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

  这里需要注意的是-s /bin/false: 设置用户的默认shell为/bin/false,这意味着该用户无法登录到系统,因为/bin/false会立即返回失败状态。这有助于提高安全性,因为mysql用户仅用于运行MySQL服务,而不需要登录权限。接下来解压压缩包并进入

1
2
tar zxvf mysql-5.7.24.tar.gz
cd mysql-5.7.24

  这里需要提一下,该死的boost太烦了,可以直接切换到/usr/local目录执行一下命令直接下载boost库

1
2
3
wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz --no-check-certificate
tar zxvf boost_1_59_0.tar.gz
mv boost_1_59_0 boost

  接下来就是编译设置相关属性和环境路径:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#指定 MySQL 的安装路径为 /usr/local/mysql-5.7.24
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.24 \
#指定 Boost 库的路径为 /usr/local/boost
-DWITH_BOOST=/usr/local/boost \
#指定 MySQL 的 Unix 套接字地址为 /usr/local/mysql-5.7.24/tmp/mysql.sock
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.24/tmp/mysql.sock \
#指定 MySQL 的数据目录为 /usr/local/mysql-5.7.24/data
-DMYSQL_DATADIR=/usr/local/mysql-5.7.24/data \
#指定 MySQL 的默认字符集为 utf8mb4
-DDEFAULT_CHARSET=utf8mb4 \
#指定 MySQL 的默认排序规则为 utf8mb4_general_ci
-DDEFAULT_COLLATION=utf8mb4_general_ci \
#启用所有额外的字符集
-DWITH_EXTRA_CHARSETS=all \
#启用 MyISAM 存储引擎
-DWITH_MYISAM_STORAGE_ENGINE=1 \
#启用 InnoDB 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#启用 Memory 存储引擎
-DWITH_MEMORY_STORAGE_ENGINE=1 \
#启用 Readline 库
-DWITH_READLINE=1 \
#启用 InnoDB Memcached 插件
-DWITH_INNODB_MEMCACHED=1 \
#关闭调试模式
-DWITH_DEBUG=OFF \
使用 MySQL 自带的 zlib 库
-DWITH_ZLIB=bundled \
启用本地文件加载功能
-DENABLED_LOCAL_INFILE=1 \
启用性能分析功能
-DENABLED_PROFILING=ON \
关闭维护者模式
-DMYSQL_MAINTAINER_MODE=OFF \
#MySQL 服务器将会监听 3306 端口
-DMYSQL_TCP_PORT=3306

  cmake完成,接下来进行make操作

1
make j -5 && make install

3.变量操作

  完成编译,接下来进行环境变量操作

1
2
3
4
5
vim /etc/profile
export PATH=/usr/local/ mysql -5.7.24/bin:$PATH
export PATH=/usr/local/ mysql -5.7.24/bin:/usr/local/ mysql -5.7.24/lib:$PATH
#退出运行该命令从载环境变量
source /etc/profile

  接下来创建一些必要的文件夹用以储存信息

1
2
3
4
5
6
cd /usr/local/mysql-5.7.24
mkdir -p /usr/local/mysql-5.7.24/{data,tmp,logs,pids}
chown mysql.mysql /usr/local/mysql-5.7.24/data
chown mysql.mysql /usr/local/mysql-5.7.24/tmp
chown mysql.mysql /usr/local/mysql-5.7.24/logs
chown mysql.mysql /usr/local/mysql-5.7.24/pids

  cd /usr/local/mysql-5.7.24 命令将当前工作目录切换到 MySQL 的安装目录。接着,mkdir -p 命令创建了一个名为 data 的子目录,用于存储 MySQL 的数据文件;创建了一个名为 tmp 的子目录,用于存储 MySQL 的临时文件;创建了一个名为 logs 的子目录,用于存储 MySQL 的日志文件;创建了一个名为 pids 的子目录,用于存储 MySQL 的进程 ID 文件。最后,chown mysql.mysql 命令将这些目录的所有者和组都设置为 mysql,以确保 MySQL 进程有足够的权限来读写这些目录

4.修改配置

  修改/etc/my.cnf文件的相关配置:

1
2
3
4
5
6
7
8
9
10
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
datadir=/usr/local/mysql-5.7.24/data
socket=/usr/local/mysql-5.7.24/tmp/mysql.sock
[mysqld_safe]
log-error=/usr/local/mysql-5.7.24/logs/mysqld.log
pid-file=/usr/local/mysql-5.7.24/pids/mysqld.pid
[client]
default-character-set=utf8mb4

  创建mysqld.log 和 mysqld.pid文件

1
2
3
4
touch /usr/local/mysql-5.7.24/logs/mysqld.log
touch /usr/local/mysql-5.7.24/pids/mysqld.pid
chown mysql.mysql -R /usr/local/mysql -5.7.24/logs/
chown mysql.mysql -R /usr/local/mysql -5.7.24/pids/

  加入守护进程

1
2
3
4
5
cd /usr/local/ mysql -5.7.24
cp support-files/mysql.server /etc/init.d/mysqld
chmod a+x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on

5.初始化

  初始化数据库, –initialize 表示默认生成一个安全的密码,–initialize-insecure 表示不生成密码

1
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

6.Mysql!启动!

  最后启动服务

1
service mysqld start

  报错了,MySQL 服务器启动失败,并且提示“ERROR! The server quit without updating PID file”的错误消息。猜测这个错误是由于 MySQL 服务器的文件内容出现了问题

  好的,排错了十几分钟,发现是自己在etc/my.cnf文件中msyql/data的路径打成了mysq/data,真想给自己一个大嘴巴子,改完后成功运行了

7.存储引擎认识

  存储引擎是MySQL的一大特色,不同于常见的Oracle,SQL server等数据库值存在一种存储引擎,MySQL提供了插件式的存储引擎架构,因此我们可以工具不同的情况调用相应的现有存储引擎或者是编写存储引擎

  • 存储引擎介绍

  数据库中的存储引擎是数据库的底层软件模块,其主要作用是提供了不同的存储机制、索引技巧、负责管理MySQL数据库中数据的存储和检索,我们可以通过相应的指令查看当前的数据库支持哪些存储引擎(一般来说mysql不注重大小写)

1
show engines;
1
show variables like '%storage_engine';

  上面这个指令是查看当前数据库默认使用的是什么存储引擎,可以看到,我们这里默认使用的是InnoDB

  接下来我们新建一个用户进行测试

1
createe user 'test'@'localhost' identified by 'test';

  进入这个用户

1
mysql –utest –ptest
  • 修改默认的存储引擎

  一般来说,修改存储引擎无非是两种情况,一种是基于创建表的时候,将默认的存储引擎修改为指定的存储引擎,一种是基于已经创建好的表修改存储引擎

  第一种:

1
2
3
4
5
CREATE TABLE `emo1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM default CHARSET=utf8;

  前面忘记给权限了,所以就算了,直接创建数据库得了,首先是这里是进入root用户,创建test数据库,然后进入创建对应的表格,并指定了使用Myisam存储引擎,接下来是第二种,

1
2
3
SHOW TABLES FROM test
SHOW TABLE STATUS FROM test WHERE Name='emo1'
ALTER TABLE emo1 engine=InnoDB;

  可以看到我们成功修改了已经创建好的表中的存储引擎属性

  • 常见的存储引擎认识

  1)InnoDB:

  InnoDB是MySQL默认的事务性存储引擎,支持ACID事务、行级锁定和外键约束等功能。它适用于高并发、大数据量的应用场景。

  2)MyISAM:

  MyISAM是MySQL最早的存储引擎之一,不支持事务和行级锁定,但具有较高的读取性能和较小的存储空间占用。它适用于读取频繁、写入较少的应用场景。

  3)Memory:

  Memory存储引擎将表数据存储在内存中,因此读取速度非常快,但数据不会持久化到磁盘上。它适用于需要快速读取临时数据的应用场景。

  4)Archive:

  Archive存储引擎适用于需要对大量历史数据进行归档和压缩的应用场景。它支持高效的插入和查询操作,但不支持更新和删除操作。

  5)CSV:

  CSV存储引擎将表数据以CSV格式存储在文件中,适用于需要导出或导入大量数据的应用场景。

特点 InnoDB MyISAM MEMORY MERGE NDB
存储限制 64TB 没有
事务安全 支持
锁机制 行锁、表锁 表锁 表锁 表锁 表锁
哈希索引 支持
全文索引 支持 支持
集群索引 支持
数据索引 支持 支持 支持
数据可压缩 支持
空间使用 N/A
内存使用 中等
批量插入速度
支持外健 支持

  这里需要注意的是事务安全是指在数据库中执行的一系列操作,要么全部成功,要么全部失败,不会出现部分成功和部分失败的情况。这是通过实现ACID(原子性、一致性、隔离性和持久性)事务特性来保证的。而InnoDB是MySQL中唯一支持事务的存储引擎,相比之下,MyISAM存储引擎不支持事务和行级锁定,因此在高并发、多用户访问的情况下容易出现数据不一致的问题。因此,在需要保证数据完整性和一致性的应用场景中,建议使用InnoDB存储引擎。

  这里主要进行两种不同存储引擎的对比

  • InnoDB 存储引擎

  InnoDB存储引擎是MySQL的默认存储引擎。InnoDB存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。而且InnoDB对事务处理的能力,也是其他存储引擎不能比拟的。并且会占用更多的磁盘空间以保留数据和索引。其主要特点是支持事务的ACID,支持外健,同时支持行锁和表锁,存储形式为.FRM表定义文件 .ibd数据文件

  • MyISAM 存储引擎

  MyISAM是基于ISAM引擎发展起来的,增加了许多有用的扩展。MyISAM的优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和修改并发,存储形式为.frm 表定义文件 .myd 数据文件 .myi 索引文件

  综上所述,InnoDB 存储引擎适用于关注事务要求性高的应用场景,适用于高并发修改场景(锁的粒度小),而MyISAM 存储引擎更关注读取的性能,不适用于高并发下频繁的修改数据(锁的粒度大)

8.基本管理工具

  MySQL的基本管理工具包括以下几个:

  MySQL命令行客户端:可以使用mysql命令行客户端连接到MySQL服务器,并执行各种管理和查询操作,例如创建、删除、修改数据库和表、添加、删除、修改数据等。使用mysql –u -p的指令进入即可

  MySQL Workbench:是一个图形化的MySQL数据库管理工具,可以通过可视化界面进行数据库和表的创建、修改、删除等操作,也可以执行SQL查询和脚本

  phpMyAdmin:是一个基于Web的MySQL数据库管理工具,可以通过浏览器访问并进行数据库和表的管理,支持多种语言和字符集,提供了丰富的功能和插件

  MySQL Enterprise Monitor:是MySQL官方提供的一款监控和管理工具,可以实时监控MySQL服务器的性能和健康状况,提供了诊断和优化工具,帮助管理员快速发现和解决问题。

  MySQL Cluster Manager:是MySQL官方提供的一款集群管理工具,可以管理和监控MySQL集群的节点、服务和资源,提供了自动化部署、扩展和升级功能,简化了集群管理的复杂性

  这里我用的比较多的就是phpMyAdmin,其次是命令行客户端,其他的暂时没使用过,但是有过了解(我觉得phpMyAdmin挺好用的)


Mysql(一)
https://one-null-pointer.github.io/2023/06/03/Linux运维——Mysql/
Author
liaoyue
Posted on
June 3, 2023
传送口