MySQL安装
# MySQL 安装
# 1. 使用YUM/APT进行安装
安装前,请查看您的操作系统版本和内核版本:
uname -m # 显示主机的硬件架构信息
选择相应的分发版进行安装,注意选择 MySQL
版本。
# 1.1. 添加YUM/APT仓库文件
https://dev.mysql.com/downloads/ (opens new window)
这里以 Rocky Linux 9
为例子进行测试,系统具体版本请参照上文图片进行。
这里选择 MySQL Yum Repository
:
下载到用户家目录并安装:
curl -SL https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm -o ~/mysql80-community-release-el9-1.noarch.rpm
rpm -ivh mysql80-community-release-el9-1.noarch.rpm
2
# 1.2. YUM安装MySQL 8.0
根据上面的选择对应的系统版本进行安装。
# 1.2.1. 查看安装仓库文件是否成功
yum repolist enabled | grep 'mysql.*-community.*'
# 1.2.2. 查看系统自带mysql/mariadb
rpm -qa | grep -i maria
rpm -qa | grep -i mysql
2
# 1.2.3. 卸载可能冲突的软件包
根据情况进行判断,如上文安装的 mysql80-community-release-el9-1.noarch.rpm
这个可能会出现在列表里,如果没有查找到其他的包就不需要执行此步骤。
yum -y remove mysql*
yum -y remove maria*
2
# 1.2.4. 安装mysql-server
yum -y install mysql-server
# 1.2.5. 启动数据库
systemctl start mysqld
systemctl status mysqld
# 设置mysql开机启动
systemctl enable mysqld
2
3
4
# 2. 使用二进制进行安装
YUM/APT进行安装可能会出现与其他已安装软件冲突的情况,并且会要求安装其他一些依赖项,这个时候我们可以选择通过官方给出的二进制文件进行安装。
如果需要其他版本可以去官方网站下载https://dev.mysql.com/downloads/mysql/ (opens new window)
这里我们以 MySQL Community Server 5.7.33
进行示例安装:
# 2.1. 基于YUM的系统 二进制安装MySQL
# 2.1.1. 安装libaio依赖库
yum -y install libaio libaio-devel
# 2.2.2. 从MySQL官方网站下载MySQL二进制文件
MySQL下载地址https://dev.mysql.com/downloads/mysql/ (opens new window)
这里选择 MySQL Community Server:
选择 Archived,Operating System 下拉框选择 Linux - Generic,版本选择 5.7.33 :
下载到用户家目录:
curl -SL https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz -o ~/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
# 2.2.3. 添加mysql用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql # 创建不可登录用户
2
# 2.2.4. 解压到对应目录
cd /usr/local
tar zxvf ~/mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.7.33-linux-glibc2.12-x86_64 mysql # 制作符号链接,如果要进行版本更新的话,只需要更改符号链接就好
2
3
# 2.2.5. 将目录导入到环境变量
$PATH:决定了shell将到哪些目录中寻找命令或程序,PATH的值是一系列目录,当您运行一个程序时,Linux在这些目录下进行搜寻编译链接。
修改$PATH的方法有很多,比如:
export PATH=$PATH:/usr/local/mysql/bin
echo $PATH
2
但是这种方式修改的环境变量,在终端关闭后就会失效,所以不推荐此方式进行修改。
第二种:编辑/etc/profile
文件,进行修改环境变量:
cat << 'EOF' >> /etc/profile
MYSQL_HOME=/usr/local/mysql
PATH=$PATH:$MYSQL_HOME/bin
export PATH MYSQL_HOME
EOF
source /etc/profile
2
3
4
5
6
# 2.2.6. 设置my.cnf
参考博客:MySQL的my.cnf文件(解决5.7.18下没有my-default.cnf) (opens new window)
cat <<EOF > /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
###############################基础设置#####################################
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id = 1
#服务端口号 默认3306
port = 3306
#mysql安装根目录
basedir = /usr/local/mysql
#mysql数据文件所在位置
datadir = /usr/local/mysql/data
#临时目录 比如load data infile会用到
tmpdir = /tmp
#设置socke文件所在目录
socket = /tmp/mysql.sock
#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
skip-external-locking
#只能用IP地址检查客户端的登录,不用主机名
skip_name_resolve = 1
#事务隔离级别,默认为可重复读,mysql默认可重复读级别(此级别下可能参数很多间隙锁,影响性能)
transaction_isolation = READ-COMMITTED
#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 1
#最大连接数
max_connections = 800
#最大错误连接数
max_connect_errors = 1000
#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
#####################用户进程分配到的内存设置BEGIN#############################
##每个session将会分配参数设置的内存大小
#用于表的顺序扫描,读出的数据暂存于read_buffer_size中,当buff满时或读完,将数据返回上层调用者
#一般在128kb ~ 256kb,用于MyISAM
#read_buffer_size = 131072
#用于表的随机读取,当按照一个非索引字段排序读取时会用到,
#一般在128kb ~ 256kb,用于MyISAM
#read_rnd_buffer_size = 262144
#order by或group by时用到
#建议先调整为2M,后期观察调整
sort_buffer_size = 2097152
#一般数据库中没什么大的事务,设成1~2M,默认32kb
binlog_cache_size = 524288
########################用户进程分配到的内存设置END############################
#在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中
#官方建议back_log = 50 + (max_connections / 5),封顶数为900
back_log = 130
############################日志设置##########################################
#数据库错误日志文件
log_error = error.log
#慢查询sql日志设置
slow_query_log = 1
slow_query_log_file = 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
############################主从复制设置#####################################
#开启mysql binlog功能
log-bin=mysql-bin
#binlog记录内容的方式,记录被操作的每一行
binlog_format = ROW
#对于binlog_format = ROW模式时,减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
#master status and connection information输出到表mysql.slave_master_info中
master_info_repository = TABLE
#the slave's position in the relay logs输出到表mysql.slave_relay_log_info中
relay_log_info_repository = TABLE
#作为从库时生效,想进行级联复制,则需要此参数
log_slave_updates
#作为从库时生效,中继日志relay-log可以自我修复
relay_log_recovery = 1
#作为从库时生效,主从复制时忽略的错误
slave_skip_errors = ddl_exist_errors
############################其他设置########################################
[mysqldump]
quick
max_allowed_packet = 128M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 256k
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
#增加每个进程的可打开文件数量
open-files-limit = 28192
EOF
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# 2.2.7. 创建必要目录,并更改所有权为mysql
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files
2
3
4
# 2.2.8. 初始化MySQL,并生成临时密码
cd /usr/local/mysql
bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
# mysql会生成临时密码,最好记下此密码
cat /usr/local/mysql/data/error.log | grep password # 查看mysql初始化密码
2
3
4
# 2.2.9. 复制启动脚本到init.d中
cd /usr/local/mysql
mkdir /etc/init.d
cp support-files/mysql.server /etc/init.d/mysql
2
3
# 2.2. systemd集成MySQL
Systemd是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。 Systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器。
如果使用YUM/APT安装mysql的话,会自动生成 systemd
目录,而二进制文件安装的话,系统中并没有集成,建议手动添加 systemd
选项。
# 2.2.1. 创建systemd服务单元配置文件
touch /usr/lib/systemd/system/mysqld.service
chmod 644 /usr/lib/systemd/system/mysqld.service
cat <<'EOF' > /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
# Have mysqld write its state to the systemd notify socket
#Type=notify
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 10000
Restart=on-failure
RestartPreventExitStatus=1
# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
EOF
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
37
38
39
40
41
# 2.2.2. 重新加载systemd配置,并启动mysql
systemctl daemon-reload
# 启动mysql
systemctl start mysqld
2
3
# 3. MySQL 启动,关闭,重启,修改root密码等操作
# 3.1. MySQL 启动,关闭,重启
如果您进行上一步的话,那就可以通过 systemctl
进行管理mysql服务的启动,关闭,重启等操作。
# 启动mysql
systemctl start mysqld
# 停止mysql
systemctl stop mysqld
# 重启mysql
systemctl restart mysqld
# 开机启动mysql
systemctl enable mysqld
# 关闭开机启动
systemctl disable mysqld
2
3
4
5
6
7
8
9
10
查看mysql服务是否已经开机启动:
systemctl is-enabled mysqld
# 3.2. 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
# 3.3. 使root帐号允许从远程登陆
use mysql;
update user set host = '%' where user='root';
flush privileges;
select host,user from user where user='root';
2
3
4