1、解压sql
tar -xvJf mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz -C /opt/install/
2、修改文件名
mv mysql-8.0.43-linux-glibc2.28-x86_64 mysql8043
3、创建data/data以及data/logs
mkdir -p data/data
mkdir -p data/logs
4、创建用户组以及用户和密码然后授权用户
#创建用户组:
groupadd mysql
useradd -g mysql mysql
# 用户授权
chown -R mysql:mysql /opt/install/mysql8043/data/
5、初始化配置文件
-
注:msyql.pid以及mysql.sock必须放在授权后的文件夹下
cat >> /etc/my.cnf << EOF
[mysqld]允许访问地址
bind-address = 0.0.0.0
服务运行端口
port = 3306
服务运行用户
user = mysql
安装基础目录
basedir = /opt/install/mysql8043
套接字文件路径,用于连接数据库服务
socket = /opt/install/mysql8043/data/data/mysqld.sock
数据文件存储路径
datadir = /opt/install/mysql8043/data/data
pid文件存储路径
pid-file = /opt/install/mysql8043/data/data/mysql.pid
错误日志文件路径
log-error = /opt/install/mysql8043/data/logs/mysqld.log
服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci修改默认存储引擎
default-storage-engine = InnoDB
密码认证插件
default-authentication-plugin = mysql_native_password
最大连接数
max_connections = 1024
跳过主机名解析
skip-name-resolve
表名忽略大小写
lower_case_table_names = 1
设置时区
default-time-zone='+08:00'
空闲连接超时时间
wait_timeout = 3600
#-------------主从复制设置-----------------------服务器ID,集群必填配置,区分机器编号,每台机器不同
server_id = 10
开启二进制日志,多用于主从复制,数据恢复
log_bin = /opt/install/mysql8043/data/data/binlog
#设置binlog模式为行级记录
binlog_format = row
#binlog启用rows_query_event事件,可以记录原始的 SQL,如果不开启的话,则只能获取 SQL 对应的行数据
binlog_rows_query_log_events = 1
#设置binlog日志过期时间
expire_logs_days = 7从服务器上中继日志的文件名
relay-log = relay-log-bin
从服务器中继日志索引文件名
relay-log-index = slave-relay-bin.index
#-------------多线程主从复制设置-----------------------
#基于组提交的并行复制方式,同一个数据库下可以有多个线程
slave-parallel-type = LOGICAL_CLOCK
#即可有8个线程来进行并行复制
slave-parallel-workers = 4
#以下两个参数是把主从复制信息存储到 innodb 表中,默认情况下主从复制信息是存储到文件系统中的,如果从服务器宕机,很容易出现文件记录和实际同步信息不同的情况,存储到表中则可以通过 innodb 的崩溃恢复机制来保证数据记录的一致性。并且性能可以有 50% ~ 80% 的提升
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON
#更改SQL模式,去除SQL模式中分组的ONLY_FULL_GROUP_BY
#mysql8.0 删除了NO_AUTO_CREATE_USER
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
#mysql5.x
#sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
symbolic-links = 0
#是否开启慢查询日志收集
slow_query_log = 1
#慢查询时间,单位为秒,超过则为慢查询
long_query_time = 1
#慢查询记录的日志文件
slow_query_log_file = /opt/install/mysql8043/data/data/mysql-slow.log
#-------------InnoDB性能优化设置-----------------------
#1,设置索引和数据缓冲区大小该设置对 InnoDB 表来说非常重要,因为 InnoDB 相比 MyISAM 表对缓冲更为敏感,如果使用默认值十分影响性能。一般设置物理内存的 60% - 70%
innodb_buffer_pool_size = 1G
#2,设置Redo日志文件大小通常,redo日志文件的总大小应足够大,以使服务器可以消除工作负载活动中的高峰和低谷,这通常意味着有足够的redo日志空间来处理一个小时以上的写活动。
设置完后一定记得把MySQL安装目录地址下的和删除掉。否则重启MySQL启动失败
redo日志大小,设置为 innodb_buffer_pool_size * 0.25
innodb_log_file_size = 200M
默认值为2,即2组redo日志
innodb_log_files_in_group = 2
#3,设置缓冲池实例个数innodb_buffer_pool_instances 可以开启多个内存缓冲池,把需要缓冲的数据 hash 到不同的缓冲池中,这样可以并行的内存读写。该参数值默认为 1,推荐设置 4 个或 8 个。
innodb_buffer_pool_instances = 4
#4,设置日志同步到磁盘方式
#(1)MySQL 的事务日志中,为了性能和效率,可以配置每次事务提交后是否将日志缓冲刷到 log file 以进行数据持久化,这就是变量 innodb_flush_log_at_trx_commit 的作用。innodb_flush_log_at_trx_commit 有 3 种可选值:0:代表大约每秒写入到日志并同步到磁盘,数据库故障会丢失 1 秒左右事务数据。
1:为每执行一条 SQL 后写入到日志并同步到磁盘,I/O 开销大,执行完 SQL 要等待日志读写,这种方式即使系统崩溃也不会丢失任何数据,但效率低。
2:代表只把日志写入到系统缓存区,再每秒同步到磁盘,效率很高,如果服务器故障,才会丢失事务数据。
#(2)对数据安全性要求不是很高的推荐设置 2,性能高,修改后效果明显。
innodb_flush_log_at_trx_commit = 2
#5,设置独享表空间默认是共享表空间(参数值为 0),共享表空间 idbdata 文件不断增大,影响一定的 I/O 性能。推荐开启独立表空间模式(参数值为 1),每个表的索引和数据都存在自己独立的表空间中,可以实现单表在不同数据库中移动。
共享表空间:某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在 data 目录下。默认的文件名为 :ibdata1 初始化为 10M。
独占表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个 .frm 表描述文件,还有一个 .ibd 文件。其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
innodb_file_per_table = 1
[client]
socket = /opt/install/mysql8043/data/data/mysqld.sock
default-character-set = utf8mb4
[mysqld_safe]
socket = /opt/install/mysql8043/data/data/mysqld.sock
[mysql]
socket = /opt/install/mysql8043/data/data/mysqld.sock
default-character-set = utf8mb4
EOF
6、配置服务
cat >> /etc/systemd/system/mysql.service << EOF
[Unit]
[Unit]
Description=MySQL Server
After=network.target
[Service]
Type=forking
ExecStart=/opt/install/mysql8043/support-files/mysql.server start
ExecStop=//opt/install/mysql8043/support-files/mysql.server stop
User=mysql
Group=mysql
[Install]
WantedBy=multi-user.target
EOF
7、初始化数据库
/opt/install/mysql8043/bin/mysqld --initialize --user=mysql --basedir=/opt/install/mysql8043 --datadir=/opt/install/mysql8043/data/data
- 初始化会生成登录密码存放路径为设置的日志路径:/opt/install/mysql8043/data/data
8、设置为开机启动(待测)
cp -a ./support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
chkconfig --add mysql
9、启动服务
systemctl daemon-reload
systemctl enable mysql --now
# 查看mysql状态
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service
sudo systemctl stop mysqld.service
10、获取初始密码并登录修改密码
./mysql -u root -p
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
# 修改表获取远程连接权限,登录数据库后执行下面命令
use mysql;
update user set host="%" where user="root";
FLUSH PRIVILEGES;