下载二进制包
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.35-linux-glibc2.17-x86_64.tar.xz
查看是否存在mariadb安装
[root@bogon ~]# rpm -qa | grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
#卸载包。 --nodeps 不检验依赖
[root@bogon ~]# rpm -e --nodeps mariadb-libs
查看glibc的版本:
[root@bogon ~]# ldd --version
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
创建用户和用户组
[root@bogon ~]# groupadd mysql
[root@bogon ~]# useradd -g mysql mysql
创建my.cnf
[root@bogon mysql]# cat /etc/my.cnf
[client]
socket = /data/mysql/3306/data/mysql.sock
[mysqld]
character_set_server=UTF8MB4
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql/3306/data
socket = /data/mysql/3306/data/mysql.sock
log_error = /data/mysql/3306/data/mysqld.err
log_timestamps = system
创建目录:
mkdir -p /data/mysql/3306/data
chown mysql.mysql /data/mysql/3306/data
初始化实例:
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize
启动mysql实例
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
查看进程:
[root@bogon mysql]# ps -ef | grep mysqld
root 2579 1563 0 21:11 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf
mysql 2743 2579 0 21:11 pts/0 00:00:01 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/3306/data/mysqld.err --pid-file=bogon.pid --socket=/data/mysql/3306/data/mysql.sock --port=3306
root 2797 1563 0 21:17 pts/0 00:00:00 grep --color=auto mysqld
数据目录的内容:
[root@bogon data]# ll /data/mysql/3306/data
total 91600
-rw-r-----. 1 mysql mysql 56 Dec 28 21:11 auto.cnf
-rw-r-----. 1 mysql mysql 157 Dec 28 21:11 binlog.000001
-rw-r-----. 1 mysql mysql 16 Dec 28 21:11 binlog.index
-rw-r-----. 1 mysql mysql 5 Dec 28 21:11 bogon.pid
-rw-------. 1 mysql mysql 1705 Dec 28 21:11 ca-key.pem
-rw-r--r--. 1 mysql mysql 1112 Dec 28 21:11 ca.pem
-rw-r--r--. 1 mysql mysql 1112 Dec 28 21:11 client-cert.pem
-rw-------. 1 mysql mysql 1705 Dec 28 21:11 client-key.pem
-rw-r-----. 1 mysql mysql 196608 Dec 28 21:14 #ib_16384_0.dblwr
-rw-r-----. 1 mysql mysql 8585216 Dec 28 21:11 #ib_16384_1.dblwr
-rw-r-----. 1 mysql mysql 5737 Dec 28 21:11 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Dec 28 21:11 ibdata1
-rw-r-----. 1 mysql mysql 12582912 Dec 28 21:12 ibtmp1
drwxr-x---. 2 mysql mysql 4096 Dec 28 21:11 #innodb_redo
drwxr-x---. 2 mysql mysql 187 Dec 28 21:11 #innodb_temp
drwxr-x---. 2 mysql mysql 143 Dec 28 21:11 mysql
-rw-r-----. 1 mysql mysql 1469 Dec 28 21:11 mysqld.err
-rw-r-----. 1 mysql mysql 26214400 Dec 28 21:12 mysql.ibd
srwxrwxrwx. 1 mysql mysql 0 Dec 28 21:11 mysql.sock
-rw-------. 1 mysql mysql 5 Dec 28 21:11 mysql.sock.lock
drwxr-x---. 2 mysql mysql 8192 Dec 28 21:11 performance_schema
-rw-------. 1 mysql mysql 1709 Dec 28 21:11 private_key.pem
-rw-r--r--. 1 mysql mysql 452 Dec 28 21:11 public_key.pem
-rw-r--r--. 1 mysql mysql 1112 Dec 28 21:11 server-cert.pem
-rw-------. 1 mysql mysql 1709 Dec 28 21:11 server-key.pem
drwxr-x---. 2 mysql mysql 28 Dec 28 21:11 sys
-rw-r-----. 1 mysql mysql 16777216 Dec 28 21:14 undo_001
-rw-r-----. 1 mysql mysql 16777216 Dec 28 21:14 undo_002
数据目录内容解释说明:
1.auto.cnf
MySQL启动时,会自动从data_dir/auto.cnf 文件中获取server-uuid值,并将这个值存储在全局变量server_uuid中。如果这个值或者这个文件不存在,那么将会生成一个新的uuid值,并将这个值保存在auto.cnf文件中。这个uuid的作用是在mysql复制时如果发生故障,slave可以通过uuid辨识master的日志。
2.binlog.index
用于记录MySQL产生的binlog日志的具体位置,binlog是MySQL记录所有操作的逻辑日志,主要用于故障恢复和主从同步时使用,由于MySQL数据库是一个多类型存储引擎并存的数据库,binlog就起着一个实例(instance)总体重做信息的角色。
3.*.pem文件
此类文件是在MySQL8.0以后加入的,用于ssl认证登陆
4.ib_buffer_pool
mysql innodb buffer pool 预热,当mysql数据库innodb buffer pool达到一定量级之后再异常宕机重启之后,就会面临一个严峻的问题,就是如何快速预热buffer pool,光靠innodb是不够的,这时就需要将innodb buffer pool存储到存储中,在数据文件中进行备份,在重启时innodb 直接读取此文件,但是要保证innodb版本 page页大小,buffer pool大小前后一致。
innodb_buffer_dump_at_shutdown:默认为关闭OFF。如果开启该参数,停止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘。
innodb_buffer_pool_load_at_startup:默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中。
innodb_buffer_pool_load_now:默认为关闭OFF。如果开启该参数,停止MySQL服务时,以手动方式将InnoDB缓存池中的热数据保存到本地硬盘。
innodb_buffer_pool_filename:如果开启InnoDB预热功能,停止MySQL服务时,MySQL将InnoDB缓冲池中的热数据保存到数据库根目录中,默认文件名为ib_buffer_pool.
innodb_buffer_pool_load_aborr:默认为关闭OFF。如果开启该参数,即便开启InnoDB预热功能,启动MySQL服务室,MySQL也不会将本地硬盘的热数据加载到InnoDB缓冲池中。
5.#ib_16384_0.dblwr #ib_16384_1.dblwr
Doublewrite buffer是一个存储,InnoDB将页写入InnoDB数据文件适当位置之前,会将缓冲池中页刷新到该存储中。如果操作系统,存储子系统,或者mysqld进程在页写入中途崩溃,InnoDB可以在崩溃恢复中从doublewrite buffer中找到一份好的备份。
虽然数据写了2次,doublewrite buffer不会需要2倍的IO负载和2倍的IO操作。数据将以一个大的连续块写入到doublewrite buffer中,操作系统单次调用fsync()(除非innodb_flush_method被设置为O_DIRECT_NO_FSYNC)。
MySQL8.0.20之前,doublewrite buffer存储在InnoDB 系统表空间中。从MySQL8.0.20开始,doublewrite buffer存储在双写文件中。
doublewrite buffer配置提供以下参数:
innodb_doublewrite:控制是否启用doublewrite buffer。默认启用。设置innodb_doublewrite=0或者启动MySQL服务时加–skip-innodb-doublewrite选项禁用。
如果doublewrite buffer位于支持原子写的Fusion-io设备上,则自动禁用doublewrite buffer,并使用Fusion-io原子写来执行数据文件写。
innodb_doublewrite_dir:8.0.20引入的,定义了InnoDB创建双写文件的目录。如果目录没有指定,双写文件创建在innodb_data_home_dir目录下,没有指定默认在数据目录下。
哈希符’#‘会自动创建在指定目录名前缀,避免与shema名冲突。然而,如果使用了’.‘, ‘#’. 或者’/‘指定了目录前缀,则不在目录名前缀没有哈希符’#'。
innodb_doublewrite_files:参数定义了双写文件的数量。默认情况下,每个缓冲池实例都会创建2个双写文件:一个刷新列表双写文件和一个LRU列表双写文件。
刷新列表双写文件用于从缓冲池刷新列表中刷新页。刷新列表双写文件默认大小是InnoDB page size * doublewrite page bytes.
LRU列表双写文件是用于刷新从缓冲池LRU列表的页。它也包括单个页刷新的槽。LRU列表双写文件默认大小为InnoDB page size * (doublewrite pages + (512 / the number of buffer pool instances)),512是为单个页刷新保留的槽的总数。
至少有2个双写文件。双写文件的最大数量是缓冲池实例的两倍。(缓冲池实例的数量由参数innodb_buffer_pool_instances控制)
双写文件有以下格式:#ib_page_size_file_number.dblwr。例如,下面的双写文件是在一个InnoDB页大小为16KB,单个缓冲池的MySQL实例上创建:
innodb_doublewrite_pages:MySQL8.0.20引入的,控制每个线程双写页的最大数量。如果这个值没有指定,innodb_doublewrite_pages设置为innodb_write_io_threads值。这个参数用于高级性能调优。默认值已经适用于大多数用户。
innodb_doublewrite_batch_size:参数MySQL8.0.20引入的,控制一批写入双写页的数量。这个参数用于高级性能调优。默认值已经适用于大多数用户。
6.ibdata1
innodb默认共享表空间,在不指定下默认所有表共享一个表空间,但是一般生产环境中建议修改默认值,每个表一个表空间
7.ib_logfile*
innodbredo日志,区别于binlog,由于mysql是一个支持多存储引擎共存的数据库,所以innodb redo只记录innodb 存储引擎的重做日志,并且redo是一个物理日志,通过xid记录数据文件位置和binlog中的位置,而binlog记录的是记录mysql全局的变化量,是一个逻辑日志。实际中mysql中由于两阶段commit的存在弱化了innodb redo的管理,也不需要像Oracle中需要备份redo日志,mysql中只需要备份binlog日志即可。
8.ibtmp1
innodb临时表空间
9.undo_001和undo_002
innodbundo表空间
登录数据库
[root@bogon data]# grep password /data/mysql/3306/data/mysqld.err
2023-12-28T21:11:50.431792-05:00 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: QdfhOte2gc(C
[root@bogon mysql]# bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.35
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> select user();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql>
mysql>
mysql> alter user user() identified by '123456';
Query OK, 0 rows affected (0.01 sec)
-- 加载密码验证组件
mysql> install component 'file://component_validate_password';
Query OK, 0 rows affected (0.00 sec)
-- 查看组件是否已加载
mysql> select * from mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn |
+--------------+--------------------+------------------------------------+
| 1 | 1 | file://component_validate_password |
+--------------+--------------------+------------------------------------+
1 row in set (0.00 sec)
-- 修改密码为简单密码报错
mysql> alter user user() identified by '1234564';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
-- 修改密码为复杂密码
mysql> alter user user() identified by 'MyPass4!';
Query OK, 0 rows affected (0.01 sec)