centos8安装MySQL8

centos8安装MySQL8

  • 安装MySQL8.0
    • 创建目录
    • 下载
    • 解压并将解压的目录重命名放置到 /usr/local/mysql
    • 用户和组
    • 分配权限
    • 编辑配置文件my.cnf
    • 初始化数据库
    • 手动启动MySQL服务
    • 安装启动MySQL服务过程中遇到的问题总结
      • 1、mysql启动时报Different lower_case_table_names settings for server ('1') and data dictionary ('0')
      • 2、启动服务完成之后,输入mysql -uroot -p回车,提示mysql:未找到命令。
      • 3、MySQL报 mysql:error while loading shared libraries: libtinfo.so.5
      • 4、Can 't connect to local MySQL server through socket '/tmp/mysql.sock ' (2)
      • 5、Host '127.0.0.1' is not allowed to connect to this MySQL server
      • 6、/dev/mapper/cl-root 超过80%导致启动mysql失败
  • MySQL服务加入systemctl管理
    • 关闭SELinux
      • 用getenforce查看(常用)
      • 临时关闭SELinux
      • 永久关闭SELinux
    • 创建mysql.service文件
    • 几个systemctl常用的命令
  • MySQL服务设置为开机自启动

安装MySQL8.0

创建目录

mkdir -p /data/mysql

下载

#切换到/data/mysql目录下
cd /data/mysql 

#wget下载二进制包
wget https://mirrors.huaweicloud.com/mysql/Downloads/MySQL-8.0/mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz

解压并将解压的目录重命名放置到 /usr/local/mysql

#解压
tar -xf mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz

#将解压的目录重命名放置到 /usr/local/mysql
mv /data/mysql/mysql-8.0.11-linux-glibc2.12-x86_64 /usr/local/mysql

用户和组

#先检查用户mysql和组mysql是否存在

#检查组是否存在
cat /etc/group | grep mysql

#如果不存在,创建组
groupadd mysql

#检查用户mysql是否存在
cat /etc/passwd | grep mysql    
或者  
id mysql

#如果不存在,创建用户
useradd -g mysql mysql

分配权限

#递归设置/usr/local/mysql文件夹及下面文件的属组和属主
chown -R mysql:mysql mysql

编辑配置文件my.cnf

vim /etc/my.cnf

#内容如下:


[client]
port=3306
socket=usr/local/mysql/mysql.sock

[mysql]
prompt="\u@db \R:\m:\s [\d]> "
no-auto-rehash

[mysqld]
user=mysql
port=3306
basedir=usr/local/mysql
datadir=usr/local/mysql/data
socket=usr/local/mysql/mysql.sock
pid-file=usr/local/mysql/mysql.pid
character-set-server=utf8mb4
open_files_limit=65535
back_log=1024
max_connections=512
max_connect_errors=1000000
table_open_cache=1024
table_definition_cache=1024
table_open_cache_instances=64
thread_stack=512K
external-locking=FALSE
max_allowed_packet=32M
sort_buffer_size=4M
join_buffer_size=4M
thread_cache_size=768
interactive_timeout=600
wait_timeout=600
tmp_table_size=32M
max_heap_table_size=32M
slow_query_log=1
slow_query_log_file=usr/local/mysql/slow.log
log-error=usr/local/mysql/mysql-error.log
long_query_time=0.1
server-id=1
log-bin=usr/local/mysql/binlog
sync_binlog=1
binlog_cache_size=4M
max_binlog_cache_size=1G
max_binlog_size=1G
expire_logs_days=7
master_info_repository=TABLE
relay_log_info_repository=TABLE
gtid_mode=on
enforce_gtid_consistency=1
log_slave_updates
binlog_format=row
relay_log_recovery=1
relay-log-purge=1
key_buffer_size=32M
read_buffer_size=8M
read_rnd_buffer_size=4M
bulk_insert_buffer_size=64M

lock_wait_timeout=3600
explicit_defaults_for_timestamp=1
innodb_thread_concurrency=0
innodb_sync_spin_loops=100
innodb_spin_wait_delay=30

transaction_isolation=REPEATABLE-READ
#innodb_additional_mem_pool_size=16M
innodb_buffer_pool_size=512M
innodb_buffer_pool_instances=8
innodb_buffer_pool_load_at_startup=1
innodb_buffer_pool_dump_at_shutdown=1
innodb_data_file_path=ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=2G
innodb_log_files_in_group=2
innodb_max_undo_log_size=4G

innodb_io_capacity=4000
innodb_io_capacity_max=8000
innodb_flush_neighbors=0
innodb_write_io_threads=8
innodb_read_io_threads=8
innodb_purge_threads=4
innodb_page_cleaners=4
innodb_open_files=65535
innodb_max_dirty_pages_pct=50
innodb_flush_method=O_DIRECT
innodb_lru_scan_depth=4000
innodb_checksum_algorithm=crc32
innodb_lock_wait_timeout=10
innodb_rollback_on_timeout=1
innodb_print_all_deadlocks=1
innodb_file_per_table=1
innodb_online_alter_log_max_size=4G
innodb_stats_on_metadata=0
lower_case_table_names = 1

[mysqldump]
quick
max_allowed_packet=32M

初始化数据库

usr/local/mysql/bin/mysqld  --defaults-file=/etc/my.cnf --initialize --user=mysql --lower-case-table-names=1

#注意:
#1、--initialize初始化之后会给root用户生成一个随机密码(可以在/usr/local/mysql/mysql-error.log里看到,也可以使用cat /usr/local/mysql/mysql-error.log | grep password。),如果想默认无密码,可以在--initialize后面加上-insecure。
#2、--lower-case-table-names=1需要在初始化数据库的命令上加上并且my.cnf也得有这一项的配置,否则会报Different lower_case_table_names settings for server ('1') and data dictionary ('0')。

手动启动MySQL服务

/usr/local/mysql/bin/mysqld_safe  --defaults-file=/etc/my.cnf --user=mysql

安装启动MySQL服务过程中遇到的问题总结

1、mysql启动时报Different lower_case_table_names settings for server (‘1’) and data dictionary (‘0’)

这个MySQL官方文档,有记录:

lower_case_table_names can only be configured when initializing the
server. Changing the lower_case_table_names setting after the server
is initialized is prohibited.

原因是MySQL8.0新增data dictionary的概念,数据初始化的时候在Linux下默认使用lower-case-table-names=0参数,数据库启动的时候读取my.cnf文件中的值。若二者值不一致则在MySQL的错误日志中记录报错信息,所以我们不仅仅需要在my.cnf里设置lower_case_table_names=1,而且在初始化的时候也得加上–lower-case-table-names=1选项。

2、启动服务完成之后,输入mysql -uroot -p回车,提示mysql:未找到命令。

原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。
首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:

ln -s /usr/local/mysql/bin/mysql /usr/bin

3、MySQL报 mysql:error while loading shared libraries: libtinfo.so.5

解决办法:
sudo ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

4、Can 't connect to local MySQL server through socket '/tmp/mysql.sock ’ (2)

问题是:找不到mysql.sock,如果你可以运行find / -name mysql.sock找到之后做一个软链接即可。

ln -s /usr/local/mysql/mysql.sock /tmp/mysql.sock

5、Host ‘127.0.0.1’ is not allowed to connect to this MySQL server

原因: MySQL数据库的配置文件中设置了参数: skip-name-resolve
从而导致使用“localhost”不能连接到数据库。
解决方法: 注释掉: #skip-name-resolve,然后重启mysql。

6、/dev/mapper/cl-root 超过80%导致启动mysql失败

/dev/mapper/cl-root 是跟Linux系统物理空间分配有关,那既然空间不足,我们可以删除一些文件再试试。使用find / -xdev -size +100M -exec ls -l {} ;命令查找都有哪些文件,然后把没用的文件,比如日志文件,删除掉,再尝试启动服务。

MySQL服务加入systemctl管理

关闭SELinux

SELinux:即安全增强型 Linux(Security-Enhanced Linux),selinux有三种运行模式:enforcing:强制模式、permissive:宽容模式和disabled:关闭。它是一个 Linux 内核模块,也是 Linux 的一个安全子系统,它主要由美国国家安全局开发,它的主要作用:最大限度地减小系统中服务进程可访问的资源(最小权限原则)。为什么要关闭SELinux呢?因为如果不关闭,启动MySQL服务会报错。

用getenforce查看(常用)

[root@dxm system]# getenforce 
Enforcing

临时关闭SELinux

[root@dxm system]# setenforce 0
[root@dxm system]# getenforce 
Permissive

临时关闭只能保证下次服务器重启之前有效,一旦重启,selinux就会是开启状态,所以这里我们使用的是永久关闭。

永久关闭SELinux

#修改配置文件
[root@dxm system]# vi /etc/selinux/config

#这里SELINUX默认值是Enforcing,这里我们设置配置项为:
SELINUX=disabled

*然后重启机器*

#修改/etc/sysconfig/selinux 这个文件也是一样的,因为它其实就是/etc/selinux/config的符号链接
[root@dxm system]# ll /etc/sysconfig/selinux
lrwxrwxrwx. 1 root root 17 12月  3 16:27 /etc/sysconfig/selinux -> ../selinux/config

创建mysql.service文件

[root@dxm system]# vim /usr/lib/systemd/system/mysql.service

#内容如下:
[Unit]
Description=MySQL
SourcePath=/etc/init.d/mysql
Before=shutdown.target

[Service]
User=mysql
Type=forking
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --daemonize
ExecStop=/etc/init.d/mysql stop
LimitNOFILE = 65535
Restart=on-failure
RestartSec=10
RestartPreventExitStatus=1
PrivateTmp=false

[Install]
WantedBy=multi-user.target

几个systemctl常用的命令

# 列出所有可用单元
systemctl list-unit-files

# 从可用单元中查看是否有mysql
systemctl list-unit-files | grep mysql

# 启动mysql服务
systemctl start mysql.service

# 查看mysql服务状态active即为启动状态,inactive是非启动状态
systemctl status mysql.service


# 重启mysql服务
systemctl restart mysql.service

# 停止mysql服务
systemctl stop mysql.service

MySQL服务设置为开机自启动

# disabled为非开机自启动状态,enabled为开机自启动状态。执行:
[root@dxm system] systemctl list-unit-files | grep mysql
mysql.service                  disabled

# 设置为开机自启动
[root@dxm system] systemctl enable mysql.service
Synchronizing state of mysql.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
Executing: /usr/lib/systemd/systemd-sysv-install enable mysql
[root@dxm system] /usr/lib/systemd/systemd-sysv-install enable mysql

#再来查看是否为开机自启动状态
[root@dxm system] systemctl list-unit-files | grep mysql
mysql.service                  enabled

# 查看并记录当前mysql的pid,用于重启之后对比
[root@dxm system] ps aux | grep mysql

# 重启服务器(注意:谨慎使用)
[root@dxm system] reboot

# 重启完成之后再检查mysql服务是否启动完成
[root@dxm system] ps aux | grep mysql

至此完成!!!!!!

下一步,我们将在Centos8上搭建mysql8.0.21主从

你可能感兴趣的:(mysql,linux,数据库)