yum 安装

CentOS 7 MySQL 5.7

默认yum源安装的5.4,这里介绍安装MySQL5.7(指全新安装)

一、查看系统是否安装了MySQL,CentOS7默认会安装mariadb,需要卸载

# 几种查询方法
rpm -qa | grep mysql
rpm -qa | grep  mariadb
yum list installed | grep mysql

二、如果已安装则卸载

# 几种卸载方法
rpm -e --nodeps XXXXXXXXX(上面列出的详细包名)
yum -y remove xxxxxxxxxx

三、下载 mysql57-community-release-el7-8.noarch.rpm 的 YUM 源:

wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm

四、安装 mysql57-community-release-el7-8.noarch.rpm:

rpm -ivh mysql57-community-release-el7-8.noarch.rpm
# 安装完后,得到如下两个包:
mysql-community.repo
mysql-community-source.repo

五、安装 MySQL yum -y install mysql-server

六、获取安装的随机密码

# 启动MySQL服务
service mysqld start
# 获取默认的登录密码
grep "password" /var/log/mysqld.log
# 复制末尾的密码:SiqHi!9_kxIc
A temporary password is generated for root@localhost: SiqHi!9_kxIc

注:MySQL 8.0 yum 安装后,默认是空密码,修改密码语句为: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

七、登录MySQL服务器 mysql -uroot -pSiqHi!9_kxIc

八、修改登录密码 SET PASSWORD = PASSWORD('new password');

九、刷新权限 flush privileges;

十、修改字符集为utf-8或者是utf8mb4

#############utf8###########
vim /etc/my.cnf
# 在 [mysqld] 前添加如下代码:
[client]
default-character-set=utf8
# 在 [mysqld] 后添加如下代码:
character_set_server=utf8


###########utf8mb4###############
vim /etc/my.cnf  添加如下代码
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

如图所示: MySQL字符集

登录MySQL服务器查看是否修改成功 show variables like '%character%'; 字符集

十一、忘记密码的操作

# 停止服务
service mysqld stop 或 systemctl stop mysqld

# 输入如下命令
mysqld_safe --user=root --skip-grant-tables --skip-networking &

# 登录MySQL
mysql -u root

# 登录成功后
use mysql;
update user set password=password("new_password") where user="root";
flush privileges;

十二、配置文件

# 主配置文件
vim /etc/my.cnf

# 存放数据库文件的目录
cd /var/lib/mysql

# 日志记录文件
vim /var/log/ mysqld.log

# socket文件
/var/run/mysqld/mysqld.pid

CentOS 8 MySQL 8.0

  • 去官网查看和下载 yum 包 :点击去官网 如果你的是 Linux 8 的系统,直接用这个地址 wget https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm

  • 安装 yum 包 rpm -ivh mysql80-community-release-el8-1.noarch.rpm

  • 更新 yum yum update

  • 安装 yum install mysql-server

  • 设置权限 chown mysql:mysql -R /var/lib/mysql

  • 初始化 mysqld --initialize --user=mysql

  • 启动 systemctl start mysqld

很遗憾,启动失败,报错如下:

Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.

查看 MySQL 状态 systemctl status mysqld 信息如下:

● mysqld.service - MySQL 8.0 database server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Tue 2020-07-07 15:57:04 CST; 15s ago
  Process: 13691 ExecStopPost=/usr/libexec/mysql-wait-stop (code=exited, status=0/SUCCESS)
  Process: 13687 ExecStart=/usr/libexec/mysqld --basedir=/usr (code=exited, status=1/FAILURE)
  Process: 13650 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mysqld.service (code=exited, status=0/SUCCESS)
  Process: 13626 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 13687 (code=exited, status=1/FAILURE)
   Status: "Server startup in progress"
    Error: 2 (No such file or directory)

Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: Starting MySQL 8.0 database server...
Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: mysqld.service: Main process exited, code=exited, status=1/FAILURE
Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: mysqld.service: Failed with result 'exit-code'.
Jul 07 15:57:04 iZuf6dou23krpyawdedba1Z systemd[1]: Failed to start MySQL 8.0 database server.
  • 重新初始化,带参 mysqld --initialize --user=mysql 还是无效

  • 还是看日志吧:vim /var/log/mysql/mysqld.log 还好不是很大,如果很大,就先清空 :&d 整个日志内容,然后再启动 systemctl start mysqld 一下,生成的部分日志如下所示:

2020-07-07T08:23:35.729468Z 0 [System] [MY-010116] [Server] /usr/libexec/mysqld (mysqld 8.0.17) starting as process 14057
2020-07-07T08:23:35.737394Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2020-07-07T08:23:35.737413Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2020-07-07T08:23:35.737430Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2020-07-07T08:23:35.737528Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2020-07-07T08:23:35.737602Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-07-07T08:23:35.737914Z 0 [System] [MY-010910] [Server] /usr/libexec/mysqld: Shutdown complete (mysqld 8.0.17)  Source distribution.
  • 日志一看,这就很清晰了,权限,无法写入数据的问题(/var/lib/mysql),问题分析:最开始初始化的时候没有带上 --user=mysql 导致默认是以当前用户 root 身份来运行的,最开始的时候,我们把这个文件夹的用户和用户组都给 mysql 了,进入该目录,能看到很多文件的所有者都是 root,可是MySQL启动是以 mysql 用户启动的,无法写入文件

  • 再次启动 systemctl start mysqld 完美启动成功,nice

  • 获取随机密码:grep "password" /var/log/mysql/mysqld.log

  • 登陆MySQL,进行一些配置

# 登录mysql
mysql -uroot -p
# Enter password: (输入查询到的临时密码)

# 第一步:必须先修改密码,修改密码为我的邮箱,也可以通过该邮箱联系到我
ALTER USER 'root'@'localhost' IDENTIFIED BY 'sxy@shuxiaoyuan.com';

# 刷新权限
flush privileges;
# 退出,重新登陆

目录结构

目录 说明
/var/lib/mysql mysql数据文件存放路径,可自定义
/etc/my.cnf mysql配置文件路径
/usr/lib64/mysql mysql库文件路径
/usr/bin/mysql* mysql二进制可执行文件路径
/etc/rc.d/init.d/mysqld mysql服务管理脚本地址
/var/log/mysqld.log mysql日志文件路径

Ubuntu 一键安装

apt update
apt install mysql-server

# 安装成功后,root密码为空,直接回车即可
mysql -u root -p

# 启用远程访问,将 bind-address = 127.0.0.1 给注释掉
vim /etc/mysql/mysql.conf.d

# 重启MySQL即可

源码安装

一、下载,先去官网瞅瞅:https://dev.mysql.com/downloads/mysql

官方安装手册(如果可以,尽量去看官方文档,懒得看,就看我这个吧):https://dev.mysql.com/doc/refman/5.7/en/installing-source-distribution.html

我这里选择的版本是:

下载源码:wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.30.tar.gz

  • 安装 gcc 等编译工具 yum install -y cmake make gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bison bison-devel

二、解压 tar -zxvf mysql-boost-5.7.30.tar.gz

三、开始安装

  • 进入解压目录 cd mysql-5.7.30
# 安装 MySQL boost 依赖,如果你下载的是不带 Boots 的版本需要安装下 Boots,编译时需要带上这个路径
curl -o boost_1_59_0.tar.gz https://jaist.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
tar -xzvf boost_1_59_0.tar.gz -C /usr/local/
  • 组装参数,构建项目,参数解释请看附录
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.30 \
-DMYSQL_DATADIR=/usr/local/mysql-5.7.30/data \
-DSYSCONFDIR=/usr/local/mysql-5.7.30/etc \
-DWITH_INNOBASE_STORAGE_ENGINE=ON \
-DWITH_MYISAM_STORAGE_ENGINE=ON \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=ON \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/usr/local/mysql-5.7.30/tmp/mysql.sock \
-DWITH_INNODB_MEMCACHED=ON \
-DWITH_BOOST=./boost/boost_1_59_0
  • cmake成功后如下图所示:

  • 开始编译:make ,这个过程会比较长(本机耗时:72min),可以去喝杯茶,上个厕所,打个游戏

  • 若编译失败,解决问题后可清理重新编译(成功就不用运行了) make clean rm CMakeCache.txt

  • 编译成功,开始安装:make install,这个很快,默认安装位置 /usr/local/mysql

四、安装完成后配置

  • 创建一个mysql用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
  • 创建相应目录
cd /usr/local/mysql-5.7.30
mkdir data etc tmp logs
  • 将目录权限授予 MySQL 用户和用户组 chown -R mysql:mysql /usr/local/mysql-5.7.30

  • 文件权限 chmod -R 750 待定

  • 创建 my.cnf 配置文件,见附录

  • 使用配置初始化数据目录 bin/mysqld --defaults-file=/usr/local/mysql-5.7.30/etc/my.cnf --initialize --user=mysql

  • 配置环境变量

# 打开配置文件
vi /etc/profile
# 在文件末尾加入下面代码,:wq保存退出(无权限可:q!强制退出,换root账户重来)
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
# 使环境变量即时生效
source /etc/profile
  • 配置 systemctl 方式启动 MySQL
# 复制配置文件到系统服务配置
cp support-files/mysql.server /etc/init.d/mysql

# 重新加载系统服务配置
systemctl daemon-reload

# 启动mysql服务
systemctl start mysql

# 下面列出其余systemctl命令
# 查看mysql服务状态
systemctl status mysql
# 停止mysql服务
systemctl stop mysql
# 重新启动mysql服务
systemctl restart mysql
# 配置mysql开机自动启动
systemctl enable mysql
# 配置mysql开机不自动启动
systemctl disable mysql
  • 修改 MySQL 登陆密码
# 查询生成的临时密码
grep "password" /usr/local/mysql/logs/error.log
# 登录mysql
mysql -uroot -p
# Enter password: (输入查询到的临时密码)

# 修改密码为我的邮箱,可以通过联系到我
ALTER USER 'root'@'localhost' IDENTIFIED BY 'sxy@shuxiaoyuan.com';

# 授予权限,所有权限(all),所有库(*.*),root用户,任何主机(%),具体可查看MySQL账号权限管理章节
grant all privileges on *.* to 'root'@'%' identified by 'sxy@shuxiaoyuan.com' with grant option;

# 刷新权限
flush privileges;
# 退出,重新登陆
  • 配置远程登陆
# 查看防火墙状态
systemctl status firewalld
# 查看3306端口状态
firewall-cmd --zone=public --query-port=3306/tcp
# 打开3306端口,--permanent 永久生效(无此参数重启后失效)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重新加载防火墙
firewall-cmd --reload

# 下面列出相关命令给喜欢折腾的朋友(教程已完结后面不用依次执行了)
# 开启防火墙
systemctl start firewalld
# 关闭防火墙
systemctl stop firewalld
# 删除3306端口
firewall-cmd --zone=public --remove-port=3306/tcp --permanent

附录一:cmake 参数解释

  • cmake参数解释,仅解释常用配置,详细可官方文档查询,我这是阅遍后总结的
参数 说明
.. 源码目录为上级目录
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql 指定MySQL安装目录
-DMYSQL_DATADIR=/usr/local/mysql/data 指定MySQL数据目录
-DSYSCONFDIR=/usr/local/mysql/etc 指定my.cnf选项文件目录
-DWITH_INNOBASE_STORAGE_ENGINE=ON Innodb引擎
-DWITH_MYISAM_STORAGE_ENGINE=ON MyISAM引擎
-DDEFAULT_CHARSET=utf8 服务器字符集,默认latin1
-DDEFAULT_COLLATION=utf8_general_ci 服务器排序规则,默认latin1_swedish_ci
-DENABLED_LOCAL_INFILE=ON 是否为加载数据启用本地,默认为OFF
-DMYSQL_TCP_PORT=3306 服务器监听端口,默认为3306
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock Unix套接字文件路径,默认/tmp/mysql.sock
-DWITH_INNODB_MEMCACHED=ON 是否生成memcached共享库,默认OFF
-DWITH_BOOST=../boost/boost_1_59_0 Boost库源代码的位置,指向下载的源码包里,相对/绝对路径皆可

附录二:my.cnf 配置文件

[client]                                                #客户端设置
port=3306                                               #服务器监听端口,默认为3306
socket=/usr/local/mysql-5.7.30/tmp/mysql.sock           #Unix套接字文件路径,默认/tmp/mysql.sock

[mysqld]                                                #服务端设置
## 一般配置选项
port=3306                                               #服务器监听端口,默认为3306
basedir=/usr/local/mysql-5.7.30                         #MySQL安装根目录
datadir=/usr/local/mysql-5.7.30/data                    #MySQL数据文件目录
socket=/usr/local/mysql-5.7.30/tmp/mysql.sock           #Unix套接字文件路径,默认/tmp/mysql.sock
pid-file=/usr/local/mysql-5.7.30/tmp/mysql.pid          #服务进程pid文件路径
character_set_server=utf8                               #默认字符集
default_storage_engine=InnoDB                           #默认InnoDB存储引擎
user=mysql

## 连接配置选项
max_connections=200                                     #最大并发连接数
table_open_cache=400                                    #表打开缓存大小,默认2000
open_files_limit=1000                                   #打开文件数限制,默认5000
max_connect_errors=200                                  #最大连接失败数,默认100
back_log=100                                            #请求连接队列数
connect_timeout=20                                      #连接超时时间,默认10秒
interactive_timeout=1200                                #交互式超时时间,默认28800秒
wait_timeout=600                                        #非交互超时时间,默认28800秒
net_read_timeout=30                                     #读取超时时间,默认30秒
net_write_timeout=60                                    #写入超时时间,默认60秒
max_allowed_packet=8M                                   #最大传输数据字节,默认4M
thread_cache_size=10                                    #线程缓冲区(池)大小
thread_stack=256K                                       #线程栈大小,32位平台196608、64位平台262144

## 临时内存配置选项
tmpdir=/tmp                                             #临时目录路径
tmp_table_size=64M                                      #临时表大小,默认16M
max_heap_table_size=64M                                 #最大内存表大小,默认16M
sort_buffer_size=1M                                     #排序缓冲区大小,默认256K
join_buffer_size=1M                                     #join缓冲区大小,默认256K

## Innodb配置选项
#innodb_thread_concurrency=0							#InnoDB线程并发数
innodb_io_capacity=200                                  #IO容量,可用于InnoDB后台任务的每秒I/O操作数(IOPS),
innodb_io_capacity_max=400                              #IO最大容量,InnoDB在这种情况下由后台任务执行的最大IOPS数
innodb_lock_wait_timeout=50                             #InnoDB引擎锁等待超时时间,默认50(单位:秒)

innodb_buffer_pool_size=512M							#InnoDB缓冲池大小,默认128M
innodb_buffer_pool_instances=4                          #InnoDB缓冲池划分区域数
innodb_max_dirty_pages_pct=75							#缓冲池最大允许脏页比例,默认为75
innodb_flush_method=O_DIRECT                            #日志刷新方法,默认为fdatasync
innodb_flush_log_at_trx_commit=2                        #事务日志刷新方式,默认为0
transaction_isolation=REPEATABLE-READ                   #事务隔离级别,默认REPEATABLE-READ

innodb_data_home_dir=/usr/local/mysql-5.7.30/data       #表空间文件路径,默认保存在MySQL的datadir中
innodb_data_file_path=ibdata1:128M:autoextend           #表空间文件大小
innodb_file_per_table=ON                                #每表独立表空间

innodb_log_group_home_dir=/usr/local/mysql-5.7.30/data  #redoLog文件目录,默认保存在MySQL的datadir中
innodb_log_files_in_group=2                             #日志组中的日志文件数,默认为2
innodb_log_file_size=128M                               #日志文件大小,默认为48MB
innodb_log_buffer_size=32M                              #日志缓冲区大小,默认为16MB

## MyISAM配置选项
key_buffer_size=32M                                     #索引缓冲区大小,默认8M
read_buffer_size=4M										#顺序读缓区冲大小,默认128K
read_rnd_buffer_size=4M									#随机读缓冲区大小,默认256K
bulk_insert_buffer_size=8M                              #块插入缓冲区大小,默认8M
myisam_sort_buffer_size=8M								#MyISAM排序缓冲大小,默认8M
#myisam_max_sort_file_size=1G                           #MyISAM排序最大临时大小
myisam_repair_threads=1                                 #MyISAM修复线程
skip-external-locking                                   #跳过外部锁定,启用文件锁会影响性能

## 日志配置选项
log_output=FILE                                         #日志输出目标,TABLE(输出到表)、FILE(输出到文件)、NONE(不输出),可选择一个或多个以逗>号分隔
log_error=/usr/local/mysql-5.7.30/logs/error.log        #错误日志存放路径
log_error_verbosity=1                                   #错误日志过滤,允许的值为1(仅错误),2(错误和警告),3(错误、警告和注释),默认值为3。
log_timestamps=SYSTEM                                   #错误日志消息格式,日志中显示时间戳的时区,UTC(默认值)和 SYSTEM(本地系统时区)
general_log=OFF                                         #开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘IO开销,影响性能
general_log_file=/usr/local/mysql-5.7.30/logs/general.log #通用查询日志存放路径

## 慢查询日志配置选项
slow_query_log=ON                                       #开启慢查询日志
slow_query_log_file=/usr/local/mysql-5.7.30/logs/slowq.log		#慢查询日志存放路径
long_query_time=2                                       #慢查询时间,默认10(单位:秒)
min_examined_row_limit=100                              #最小检查行限制,检索的行数必须达到此值才可被记为慢查询
log_slow_admin_statements=ON                            #记录慢查询管理语句
log_queries_not_using_indexes=ON                        #记录查询未使用索引语句
log_throttle_queries_not_using_indexes=5                #记录未使用索引速率限制,默认为0不限制
log_slow_slave_statements=ON                            #记录从库复制的慢查询,作为从库时生效,从库复制中如果有慢查询也将被记录

## 复制配置选项
server-id=1                                             #MySQL服务唯一标识
log-bin=mysql-bin                                       #开启二进制日志,默认位置是datadir数据目录
log-bin-index=mysql-bin.index                           #binlog索引文件
binlog_format=MIXED                                     #binlog日志格式,分三种:STATEMENT、ROW或MIXED,MySQL 5.7.7之前默认为STATEMENT,之后默认为ROW
binlog_cache_size=1M                                    #binlog缓存大小,默认32KB
max_binlog_cache_size=1G                                #binlog最大缓存大小,推荐最大值为4GB
max_binlog_size=256M                                    #binlog最大文件大小,最小值为4096字节,最大值和默认值为1GB
expire_logs_days=7                                      #binlog过期天数,默认为0不自动删除
log_slave_updates=ON                                    #binlog级联复制
sync_binlog=1                                           #binlog同步频率,0为禁用同步(最佳性能,但可能丢失事务),为1开启同步(影响性能,但最安全不会丢失任何事务),为N操作N次事务后同步1次

relay_log=relay-bin                                     #relaylog文件路径,默认位置是datadir数据目录
relay_log_index=relay-log.index                         #relaylog索引文件
max_relay_log_size=256M                                 #relaylog最大文件大小
relay_log_purge=ON                                      #中继日志自动清除,默认值为1(ON)
relay_log_recovery=ON                                   #中继日志自动恢复

auto_increment_offset=1                                 #自增值偏移量
auto_increment_increment=1                              #自增值自增量
slave_net_timeout=60                                    #从机连接超时时间
replicate-wild-ignore-table=mysql.%                     #复制时忽略的数据库表,告诉从线程不要复制到与给定通配符模式匹配的表
skip-slave-start                                        #跳过Slave启动,Slave复制进程不随MySQL启动而启动

## 其他配置选项
#memlock=ON                                             #开启内存锁,此选项生效需系统支持mlockall()调用,将mysqld进程锁定在内存中,防止遇到操作系统导致mysqld交换到磁盘的问题

[mysqldump]                                             #mysqldump数据库备份工具
quick                                                   #强制mysqldump从服务器查询取得记录直接输出,而不是取得所有记录后将它们缓存到内存中
max_allowed_packet=100M                                 #最大传输数据字节,使用mysqldump工具备份数据库时,某表过大会导致备份失败,需要增大该值(大>于表大小即可)

[myisamchk]                                             #使用myisamchk实用程序可以用来获得有关你的数据库表的统计信息或检查、修复、优化他们
key_buffer_size=32M                                     #索引缓冲区大小
myisam_sort_buffer_size=8M                              #排序缓冲区大小
read_buffer_size=4M                                     #读取缓区冲大小
write_buffer_size=4M                                    #写入缓冲区大小

附录三:参考链接

  • 参考安装链接 https://blog.csdn.net/qq_32656561/article/details/103593869

  • MySQL yum 包下载:https://dev.mysql.com/downloads/repo/yum/

  • https://blog.csdn.net/jwx90312/article/details/105862466