基于二进制包的mysql安装

发布时间:2023年12月29日

下载二进制包

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)

文章来源:https://blog.csdn.net/guo20082200/article/details/135283470
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。