一文讲透CentOS下安装部署使用MYSQL

原文链接

一、安装部署

安装方法一
(一)安装前准备
1.卸载[MariaDB]
复制代码
安装MySQL的话会和MariaDB的文件冲突,所以需要先卸载掉MariaDB。
1.1 查看是否安装mariadb
复制代码
rpm -qa|grep mariadb
1.2 卸载
复制代码
rpm -e --nodeps 文件名
1.3 检查是否卸载干净
复制代码
rpm -qa|grep mariadb
2.检查依赖
2.1 查看是否安装libaio
复制代码
rpm -qa|grep libaio

如果没有安装则执行

复制代码
yum -y install libaio //安装libaio 
2.2 查看是否安装numactl
复制代码
rpm -qa|grep numactl

如果没有安装则执行

复制代码
yum -y install numactl //安装numactl 
(二)安装MySQL
1.下载资源包

可以在官网下载安装包或者在服务器直接使用wget下载。

1.1 官网下载
复制代码
MySQL官网下载地址:https://dev.mysql.com/downloads/mysql/
1.2 wget下载
复制代码
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.30-el7-x86_64.tar
2.解压

注:本文安装包上传到了 /usr/local/ 目录下

进入安装包目录

复制代码
cd /usr/local/

拆分tar包

复制代码
tar -xvf mysql-8.0.30-el7-x86_64.tar

解压安装包

复制代码
tar -zxvf mysql-8.0.30-el7-x86_64.tar.gz
3.重命名

将解压后的文件夹重命名为mysql

复制代码
mv mysql-8.0.30-el7-x86_64/ mysql
4.创建存储数据文件

在重命名后的mysql文件夹中创建data文件夹

复制代码
mkdir mysql/data
5.设置用户组并赋权

创建用户组

复制代码
groupadd mysql

创建用户 -r:创建系统用户 -g:指定用户组

复制代码
useradd -r -g mysql mysql

更改属主和数组

复制代码
chown -R mysql:mysql /usr/local/mysql/

更改权限

复制代码
chmod -R 755 /usr/local/mysql/
6.初始化MySQL

进入MySQL的bin目录

复制代码
cd /usr/local/mysql/bin/

初始化

复制代码
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql

初始化完成后会打印一个随机密码,后面会用到。

7.配置参数文件
复制代码
vi /etc/my.cnf

配置文件修改为以下内容,也可以根据自己需要设置参数。

复制代码
[client]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set = utf8mb4
​
[mysql]  
default-character-set = utf8mb4
​
[mysqld]  
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
​
port = 3306
socket = /usr/local/mysql/data/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
datadir = /usr/local/mysql/data
#lower_case_table_names=1
#如果要设置lower_case_table_names可以在初始化里面设置 ./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --lower_case_table_names=1
​
[mysqldump]
quick
max_allowed_packet = 16M
​
[mysql]
no-auto-rehash
​
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
​
[mysqlhotcopy]
interactive-timeout

配置后修改 /etc/my.cnf 的权限为777

复制代码
chmod 777 /etc/my.cnf
8.启动MySQL
复制代码
/usr/local/mysql/support-files/mysql.server start
9.设置软连接,并重启MySQL
复制代码
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock
service mysql restart
10.登录并更改密码
复制代码
[root@localhost bin]# mysql -uroot -p
Enter password: 输入初始化随机密码

两种改密方式二选一

复制代码
alter user 'root'@'localhost' identified by '123456';
set password for root@localhost = '123456';
11.开放远程连接
复制代码
mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;    //刷新权限
12.连接工具测试连接MySQL

如果服务器本地可以连接,但是连接工具远程连接不进去,则需要检查一下防火墙是否放行3306端口,也可以暂时先关闭防火墙后重试。

关闭防火墙

复制代码
systemctl stop firewalld
13.MySQL启动和停止

CentOS6和CentOS7命令都可以使用。

启动

复制代码
service mysql start
systemctl start mysql

停止

复制代码
service mysql stop
systemctl stop mysql

重启

复制代码
service mysql restart
systemctl restart mysql

查看状态

复制代码
service mysql status
systemctl status mysql
(三)设置开机自启动(可选)

将服务文件拷贝到 /etc/init.d下,并重命名为mysqld

复制代码
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

赋予可执行权限

复制代码
chmod +x /etc/init.d/mysqld

添加服务

复制代码
chkconfig --add mysqld

显示服务列表

复制代码
chkconfig --list

注:如果看到mysqld的服务,并且3,4,5都是on的话则成功,如果是off,则执行

复制代码
chkconfig --level 345 mysqld on

重启系统

复制代码
reboot

重启后查看mysql是否开机自启动

复制代码
ps -ef|grep mysql
安装方法二
步骤1:添加MySQL Yum源

MySQL提供了Yum Repository,使得在CentOS 7系统上安装MySQL非常容易。使用以下命令添加MySQL Yum Repository。(可以到https://dev.mysql.com/downloads/repo/yum/下载其它版本安装)

复制代码
sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-10.noarch.rpm
步骤2:安装MySQL 8

安装MySQL 8之前,先使用以下命令更新系统包。

复制代码
sudo yum update

然后使用以下命令安装MySQL 8。

复制代码
sudo yum install mysql-community-server

安装完成后,使用以下命令启动MySQL服务。

复制代码
sudo systemctl start mysqld

使用以下命令设置MySQL在系统启动时自动启动。

复制代码
sudo systemctl enable mysqld
步骤3:安全设置

安装MySQL后,需要进行安全设置。使用以下命令执行MySQL安全脚本。

复制代码
sudo mysql_secure_installation

该脚本将提示您设置MySQL root用户的密码,删除匿名用户和测试数据库,并禁止root用户通过远程连接登录MySQL。

查看默认密码

复制代码
vi /var/log/mysqld.log
找到类似:
[Server] A temporary password is generated for root@localhost: Hmejr*u)j1gu

:安全设置前,需要修改配置文件,增加"skip-grant-tables"跳过权限验证

复制代码
vi /etc/my.cnf
步骤4:登录MySQL

安装并进行安全设置后,可以使用以下命令登录MySQL。

复制代码
mysql -u root -p

其中,-u选项表示要使用的用户,-p选项表示需要输入密码进行验证。如果密码正确,将打开MySQL shell,允许您在MySQL中执行各种操作。

到此,CentOS 7系统上安装MySQL 8的教程就结束了。通过这个教程,您可以在您的服务器上安装和配置MySQL 8以存储和管理数据。

二、常见问题

(一)设置表名不区分大小写
复制代码
vi /etc/my.cnf

增加一行

复制代码
lower_case_table_names=1
(二)MySQL8.0表名大小写问题及解决
复制代码
1、停止服务:systemctl stop mysqld 或 service mysql stop
2、修改原数据路径:mv /var/lib/mysql /var/lib/mysql_bak
3、编辑配置:/etc/my.cnf-->[mysqld]下添加lower_case_table_names=1
4、重新初始化:mysqld --user=mysql --datadir=/var/lib/mysql --lower-case-table-names=1 --initialize
5、启动服务:service mysql start
6、在log文件中找到临时密码
7、修改密码:mysql -u root -p-->临时密码-->ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
8、开放远程连接:
mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;    //刷新权限
(三)超出MySQL最大连接数问题及解决

通常,mysql的最大连接数默认是100, 最大可以达到16384。查看最大连接数

复制代码
show variables like '%max_connections%';

命令行登录MySQL后。设置新的MySQL最大连接数为200:

复制代码
MySQL> set global max_connections=200

这种方式有个问题,就是设置的最大连接数只在mysql当前服务进程有效,一旦mysql重启,又会恢复到初始状态。因为mysql启动后的初始化工作是从其配置文件中读取数据的,而这种方式没有对其配置文件做更改。

(四)MySQL最大连接数,TimeOut配置

1.MySQL的max_connections参数用来设置最大连接(用户)数。每个连接MySQL的用户均算作一个连接,max_connections的默认值为100左右

1.1查看数据库配置的最大连接数

复制代码
show variables like "max_connections";

1.2如果实际情况中的最大连接数超过,就会提示TimeOut超出最大请求数,这时我们需要进行配置项的修改

设置调整最大连接数

复制代码
set global max_connections = 1000;
(五)Mysql的连接线程池

1.查看Mysql数据库当前的所有连接线程

复制代码
show full processlist;
(六)Mysql TimeOut配置

查看Mysql的TimeOut配置

复制代码
show global variables like '%timeout%';
参数名 参数作用
delayed_insert_timeout 在获取链接时,等待握手的超时时间,只在登录时有效,登录成功这个参数就不管事了。主要是为了防止网络不佳时应用重连导致连接数涨太快,一般默认即可
delayed_insert_timeout 这是为MyISAM INSERT DELAY设计的超时参数,在INSERT DELAY中止前等待INSERT语句的时间
innodb_lock_wait_timeout 事务遇到锁等待时的Query超时时间。跟死锁不一样,InnoDB一旦检测到死锁立刻就会回滚代价小的那个事务,锁等待是没有死锁的情况下一个事务持有另一个事务需要的锁资源,被回滚的肯定是请求锁的那个Query
innodb_rollback_on_timeout 这个参数关闭或不存在的话遇到超时只回滚事务最后一个Query,打开的话事务遇到超时就回滚整个事务
interactive_timeout/wait_timeout 一个持续SLEEP状态的线程多久被关闭。线程每次被使用都会被唤醒为activity状态,执行完Query后成为interactive状态,重新开始计时。wait_timeout不同在于只作用于TCP/IP和Socket链接的线程,意义是一样的
net_read_timeout / net_write_timeout 这个参数只对TCP/IP链接有效,分别是数据库等待接收客户端发送网络包和发送网络包给客户端的超时时间,这是在Activity状态下的线程才有效的参数
slave_net_timeout 这是Slave判断主机是否挂掉的超时设置,在设定时间内依然没有获取到Master的回应就人为Master挂掉了

这里我们设置下Sleep线程的时间,以免线程池被消耗太多

执行修改脚本

复制代码
set global interactive_timeout=100;
set global wait_timeout=30;

**注意:**在项目的连接字符中也需要确认是否进行了相关的配置,导致了Mysql连接失败问题

以上设置会马上生效,但是当mysql重启时这个设置会失效,更好的办法是

找到mysqld块,修改或者添加下面的设置:

复制代码
max_connections=200
wait_timeout=30
interactive_timeout=100

这样修改之后,即便重启mysql也会默认载入这个配置了

三、定时备份MySQL数据库

1、备份执行脚本

新建 mysql 的备份命令脚本

复制代码
$ vi db_backup.sh

复制以下内容:

复制代码
#!/bin/bash
​
# 数据库名称(多数据库备份)
database_name="aqjgpt homecare"
mysql_password="Wgkj#6789"
# 备份文件保存地址
backup_dir="/data/db_backup"
# 备份文件名前缀
backup_prefix="db"
# 备份文件的有效期,单位为day
backup_days="30"
​
dd=`date +%Y-%m-%d-%H-%M-%S`
backup_file="$backup_dir/$backup_prefix-$dd.sql"
​
if [ ! -d $backup_dir ];
then
    mkdir -p $backup_dir;
fi
​
mysqldump -u root -p$mysql_password --databases $database_name > $backup_file
​
# 压缩sql文件
gzip -f $backup_file
​
# 写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
​
# 清除过期的文件
find $backup_dir -name "$backup_prefix*.sql.gz" -mtime +$backup_days -exec rm {} \;

至此,执行该脚本,可以生成压缩的数据库.sql文件

2、定时任务

给 shell 设置执行权限:

复制代码
$ chmod +x db_backup.sh

使用 crontab 命令定期执行脚本

复制代码
# 编辑 cron 脚本文件
$ sudo crontab -e

在打开的配置文件中追加以下内容:

复制代码
# 示例为每天凌晨2点30分执行备份脚本文件
# 注意修改要执行的脚本的路径
30 2 * * * /data/db_backup.sh

检查定时任务:

复制代码
$ crontab -l
​
# 结果会包含新增加的定时任务
# 30 2 * * * /root/bin/db_backup.sh

至此实现了定时备份 MySQL 数据库功能。

注:该定时任务会在系统重启后依旧保留,不用担心重新设置

四、数据导入导出

1、导出数据

复制代码
mysqldump -h 主机名 -u 用户名 -p 数据库名 >导出的文件路径

2、导入数据

复制代码
mysql -h 主机名 -u 用户名 -p 数据库名< 导入的文件路径

3、压缩导出数据

复制代码
mysqldump -h 主机名 -u 用户名 -p 数据库名 | gzip >导出的压缩文件路径

4、压缩导入数据

复制代码
gunzip< 压缩文件路径 | mysql -h 主机名 -u 用户名 -p 数据库名

5、导出指定表数据

复制代码
mysqldump -h 主机名 -u 用户名 -p 数据库名 表名 >导出的文件路径

五、使用mysqldump备份与恢复数据

复制代码
前言:mysqldump和binlog都可以作为MySQL数据库备份的方式:
​
mysqldump用于将整个或部分数据库导出为可执行的SQL文件,也可以用于导入或还原数据库,它可以创建一个数据库的逻辑备份,包括表结构和数据
binlog(二进制日志)是一种事务日志,记录了对数据库进行的每个更改操作,如插入、更新、删除等。它用于增量备份和数据恢复,可以重放这些更改以还原到之前的状态
mysqldump和binlog的主要区别如下:
​
数据格式:mysqldump生成的备份文件是以文本形式保存的SQL语句,可以读取和修改。binlog则是以二进制格式保存的事务日志,不能直接查看或修改,需要专门的工具(如mysqlbinlog)进行解析和分析。
备份范围:mysqldump可以备份整个数据库或特定的表,以及备份时可以选择备份的数据内容(例如只备份表结构、只备份数据等)。而binlog会记录所有的更改操作,包括对表结构和数据的更改,因此可以用来恢复到任何一个时间点之前的状态。
使用场景:mysqldump适用于定期完整备份数据库或移植数据库,以便将数据导入到不同的MySQL服务器。binlog则适用于增量备份和恢复,可以用于故障恢复、数据同步、主从复制等场景。
通过binlog恢复数据传送门:
https://blog.csdn.net/DreamEhome/article/details/130010601

1、mysqldump简介

mysqldump命令可以将数据库中指定或所有的库、表导出为SQL脚本。表的结构和表中的数据将存储在生成的SQL脚本中。

复制代码
    mysqldump备份恢复原理:通过先查出需要备份的库及表的结构,在SQL脚本中生成CREATE语句。然后将表中的所有记录转换成INSERT语句并写入SQL脚本中。这些CREATE语句和INSERT语句都是还原时使用的:还原数据时可使用其中的CREATE语句来创建表,使用INSERT语句还原数据。

2、mysqldump备份数据 备份的形式可以分为以下3种:

(1)备份所有数据库(包含库中所有表及数据) (2)备份一个/多个数据库(包含库中所有表及数据) (3)备份指定库中的指定表(指定表及其数据) 下面将分别介绍如何实现这3种形式的数据备份。

2.1 备份所有数据库 语法:mysqldump -u[用户名] -p[密码] --all-databases > /备份路径/备份文件名.sql

复制代码
#备份全部数据库
mysqldump -uroot -p123456 --all-databases > backup_all_databases.sql

mysqldump

复制代码
    -uroot -p123456                   登录MySQL的用户名/密码 
    --all-databases >
    backup_all_databases.sql   备份文件的名称,可加保存路径

2.2 备份一个/多个数据库

语法:mysqldump -u[用户名] -p[密码] --databases DB1 [DB2 DB3...] > /备份路径/备份文件名.sql

复制代码
#备份一个数据库
mysqldump -uroot -p123456 --databases database_test1 > backup_database_test1.sql
 
#备份多个数据库
mysqldump -uroot -p123456 --databases database_test1 database_test2 > backup_database_test1_test2.sql

2.3 备份指定库中的指定表

语法:mysqldump -u[用户名] -p[密码] [database] [table1] [table2] > /备份路径/备份文件名.sql

复制代码
#备份库中的部分表
mysqldump -uroot -p123456 database_test1 table_test1 table_test2 > backup_tables.sql

查看备份文件中的内容

复制代码
#查看其中一个备份文件
cat backup_tables.sql | grep -v "^--" |grep -v "^/" |grep -v "^$"
复制代码
cat
        backup_database_test1.sql                      要查看的文件
        | grep -v "^--" |grep -v "^/" |grep -v "^$"    过滤不显示的信息(grep为搜索,-v表示忽略)

3、mysqldump恢复数据

3.1 恢复数据库

备份所有数据库和备份指定库的恢复逻辑相同

语法:mysql -u[用户名] -p[密码] < /备份文件路径/备份文件名.sql

复制代码
#还原数据库
mysql -uroot -p123456 < backup_database_test1_test2.sql

3.2 恢复数据表

语法:mysqldump -u[用户名] -p[密码] [database] < /备份文件路径/备份文件名.sql

恢复表的前提是表所在的库必须存在,且可任意指定库进行恢复操作

复制代码
mysql -u root -p123456 database_test1 < backup_tables.sql

六、常用命令

复制代码
show global variables like '%lower_case%';
show global variables like "%datadir%";
相关推荐
0.0雨2 小时前
设置集群的SSH免密登陆
linux·服务器·ssh
FVV11232 小时前
Windows键盘鼠标自动化工具,免费永久使用
运维·自动化
胖咕噜的稞达鸭2 小时前
【Linux系统编程】解密环境变量与进程地址空间
linux·运维·chrome
深圳市恒星物联科技有限公司2 小时前
国内排水监测公司有哪些?
大数据·网络·数据库·物联网
峰顶听歌的鲸鱼2 小时前
17.docker:监控及日志
linux·运维·docker·容器·云计算
黄焖鸡能干四碗2 小时前
什么是RPA?RPA自动流程机器人在智能制造的应用
大数据·网络·数据库·安全·制造
爱干饭的boy2 小时前
MacBook安装node.js/maven/mysql
mysql·node.js·maven
一颗青果2 小时前
Linux下的线程
linux·运维·服务器
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [fs]fs_context
linux·笔记·学习