Linux安装MySQL

  • A+
所属分类:MySQL


MySQL是一个开源、高性能的关系型数据库管理系统,使用SQL语言,支持多线程和跨平台操作,广泛应用于各类网站和应用程序,提供多种存储引擎和数据安全保障。

主要特点
开源与免费:可在GPL许可下自由使用、修改和分发;
高性能:优化SQL算法,提高查询速度;
多线程:支持多线程,充分利用CPU资源;
跨平台:可在多种操作系统上运行;
多语言支持:为C、Java、PHP、Python等提供API;
可扩展性:支持多种存储引擎;
数据安全性:提供用户权限管理、数据备份和恢复、数据加密等。

结构组成
数据库:存储数据的集合,包括表、视图、索引等;
数据表:数据库中最基本的元素,用于存储数据记录;
数据记录:表中的每一行,代表一条数据。

SQL语言
SQL(Structured Query Language)是用于处理关系型数据库的标准编程语言;
支持数据定义语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)。

安装MySQL

安装MySQL依赖

yum -y install libaio

下载MySQL包

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.32-el7-x86_64.tar.gz

解压安装MySQL

tar xvf mysql-5.7.32-el7-x86_64.tar.gz
mv mysql-5.7.32-el7-x86_64 /usr/local/mysql-5.7.32
ln -s /usr/local/mysql-5.7.32/ /usr/local/mysql
vim /etc/my.cnf
[client]
socket = /usr/local/mysql/tmp/mysql.sock
port = 3306
default-character-set = utf8mb4

[mysqld]
user = mysql
pid-file = /usr/local/mysql/tmp/mysqld.pid
socket = /usr/local/mysql/tmp/mysql.sock
datadir = /data/mysql
log-error = /usr/local/mysql/logs/mysqld.log
bind-address = 0.0.0.0
port = 3306
log-bin = mysql-bin
server_id = 1
binlog_format = mixed
skip_symbolic_links = 1
max_connections = 500
connect_timeout = 10
wait_timeout = 600
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
explicit_defaults_for_timestamp = 1 # As the parameter is deprecated, set it to 1 to avoid warnings
sql_mode = STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE

[mysqldump]
quick
quote-names
max_allowed_packet = 64M

创建数据目录和日志文件,临时文件目录

mkdir -p /data/mysql
mkdir -p /usr/local/mysql/{logs,tmp}

创建用户并授权

useradd -s /sbin/nologin -M mysql
chown -R mysql:mysql /usr/local/mysql*

MySQL初始化

/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize

设置开机自启

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld.service

配置MySQL环境变量

echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysqld.sh
source /etc/profile

登录MySQL并修改密码

grep 'temporary password' /usr/local/mysql/logs/mysqld.log 
2025-03-31T09:19:02.250750Z 1 [Note] A temporary password is generated for root@localhost: pZr=BMaPz3*u        //过滤出临时密码
mysql -uroot -p
Enter password:pZr=BMaPz3*u        //复制过滤出的密码登录
mysql> ALTER USER root@localhost IDENTIFIED BY 'xxx.com';

查看数据库

Linux安装MySQL

MySQL常用命令

SHOW DATABASES;        //查询数据库
SELECT User, Host FROM mysql.user;        //查看所有用户
SHOW TABLES;        //查询当前库下有哪些表
SELECT *FROM table_name;        //查询表中数据
CREATE DATABASE database_name;        //创建数据库
use database_name;        //使用database_name库

CREATE TABLE table_name (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    position VARCHAR(50),
    hire_date DATE
);        //创建一个table_name的表
          //id列是一个整数类型,自动递增,并且是主键
          //name列是一个可变字符类型,最大长度为100,且不允许为NULL
          //position列是一个可变字符类型,最大长度为50
          //hire_date列是一个日期类型

INSERT INTO table_name (name, position, hire_date) VALUES
    ('xxx','admin','2025-03-31'),
    ('xxx1','staff','2025-03-31');        //向表中插入多条数据

UPDATE employees
    SET name = 'www', position = 'group leader', hire_date = '2025-4-1'
    WHERE id = 2;        //更新数据
          //name = 'www': 将name列的值更新为'www'
          //position = 'group leader': 将position列的值更新为'group leader'
          //hire_date = '2025-4-1': 将hire_date列的值更新为'2025-4-1'
          //WHERE id = 2: 指定哪些行应该被更,在这个例子中,只有id值为2的行会被更新

CREATE USER 'username'@'host' IDENTIFIED BY 'password';        //创建用户
GRANT ALL ON *.* TO 'username'@'host';        //授权
FLUSH PRIVILEGES;        //刷新权限
DROP DATABASE database_name;        //删除数据库
DROP TABLE table_name;        //删除表
REVOKE ALL ON *.* FROM 'username'@'host';        //撤销授权
DROP USER 'username'@'host';        //删除用户
xxx