当前位置:   article > 正文

centos8安装mysql8(带有解决远程访问mysql问题)_/usr/local/mysql/data/master.pid

/usr/local/mysql/data/master.pid

1.在安装MySql之前,要先卸载掉CentOS自带的MariaDB,输入:

rpm -qa | grep -i mariadb

结果:

再次输入查出的文件(删除文件):

rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64

2.删除其他的mysql文件:

rpm -qa | grep mysql #检查系统是否已安装mysql

(如果系统已安装mysql,可以卸载:

rpm -e (mysql) #普通模式删除

rpm -e --nodeps (mysql)# 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除)

3.下载mysql8

 新建目录存放mysql包

mkdir -p /data/mysql

 下载

  1. #切换到/data/mysql目录下
  2. cd /data/mysql
  3. #wget下载二进制包
  4. wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz

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

  1. #解压
  2. tar Jxvf mysql-8.0.22-linux-glibc2.12-x86_64.tar.xz
  3. #将解压的目录重命名放置到 /usr/local/mysql
  4. mv /data/mysql/mysql-8.0.22-linux-glibc2.12-x86_64 /usr/local/mysql
  5. #将文件名称改为mysql8
  6. mv mysql-8.0.22-linux-glibc2.12-x86_64/ mysql8

用户和组

  1. #先检查用户mysql和组mysql是否存在
  2. #检查组是否存在
  3. cat /etc/group | grep mysql
  4. #如果不存在,创建组
  5. groupadd mysql
  6. #检查用户mysql是否存在
  7. cat /etc/passwd | grep mysql
  8. 或者
  9. id mysql
  10. #如果不存在,创建用户
  11. useradd -g mysql mysql

分配权限

  1. #递归设置/usr/local/mysql文件夹及下面文件的属组和属主(此操作需要在mysql文件夹上一级才行)
  2. chown -R mysql:mysql mysql

编辑配置文件my.cnf

vim /etc/my.cnf
  1. #内容如下:
  2. [mysqld]
  3. user=mysql
  4. port=3306
  5. basedir=/usr/local/mysql
  6. datadir=/usr/local/mysql/data
  7. socket=/usr/local/mysql/mysql.sock
  8. pid-file=/usr/local/mysql/mysql.pid
  9. character-set-server=utf8mb4
  10. open_files_limit=65535
  11. back_log=1024
  12. max_connections=512
  13. max_connect_errors=1000000
  14. table_open_cache=1024
  15. table_definition_cache=1024
  16. table_open_cache_instances=64
  17. thread_stack=512K
  18. external-locking=FALSE
  19. max_allowed_packet=32M
  20. sort_buffer_size=4M
  21. join_buffer_size=4M
  22. thread_cache_size=768
  23. interactive_timeout=600
  24. wait_timeout=600
  25. tmp_table_size=32M
  26. max_heap_table_size=32M
  27. slow_query_log=1
  28. slow_query_log_file=/usr/local/mysql/slow.log
  29. log-error=/usr/local/mysql/mysql-error.log
  30. long_query_time=0.1
  31. server-id=1
  32. log-bin=/usr/local/mysql/binlog
  33. sync_binlog=1
  34. binlog_cache_size=4M
  35. max_binlog_cache_size=1G
  36. max_binlog_size=1G
  37. expire_logs_days=7
  38. master_info_repository=TABLE
  39. relay_log_info_repository=TABLE
  40. gtid_mode=on
  41. enforce_gtid_consistency=1
  42. log_slave_updates
  43. binlog_format=row
  44. relay_log_recovery=1
  45. relay-log-purge=1
  46. key_buffer_size=32M
  47. read_buffer_size=8M
  48. read_rnd_buffer_size=4M
  49. bulk_insert_buffer_size=64M
  50. lock_wait_timeout=3600
  51. explicit_defaults_for_timestamp=1
  52. innodb_thread_concurrency=0
  53. innodb_sync_spin_loops=100
  54. innodb_spin_wait_delay=30
  55. transaction_isolation=REPEATABLE-READ
  56. #innodb_additional_mem_pool_size=16M
  57. innodb_buffer_pool_size=512M
  58. innodb_buffer_pool_instances=8
  59. innodb_buffer_pool_load_at_startup=1
  60. innodb_buffer_pool_dump_at_shutdown=1
  61. innodb_data_file_path=ibdata1:1G:autoextend
  62. innodb_flush_log_at_trx_commit=1
  63. innodb_log_buffer_size=32M
  64. innodb_log_file_size=2G
  65. innodb_log_files_in_group=2
  66. innodb_max_undo_log_size=4G
  67. innodb_io_capacity=4000
  68. innodb_io_capacity_max=8000
  69. innodb_flush_neighbors=0
  70. innodb_write_io_threads=8
  71. innodb_read_io_threads=8
  72. innodb_purge_threads=4
  73. innodb_page_cleaners=4
  74. innodb_open_files=65535
  75. innodb_max_dirty_pages_pct=50
  76. innodb_flush_method=O_DIRECT
  77. innodb_lru_scan_depth=4000
  78. innodb_checksum_algorithm=crc32
  79. innodb_lock_wait_timeout=10
  80. innodb_rollback_on_timeout=1
  81. innodb_print_all_deadlocks=1
  82. innodb_file_per_table=1
  83. innodb_online_alter_log_max_size=4G
  84. innodb_stats_on_metadata=0
  85. lower_case_table_names = 1
  86. [mysqldump]
  87. quick
  88. max_allowed_packet=32M

初始化数据库(这个不执行)

  1. usr/local/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --lower-case-table-names=1
  2. #注意:
  3. #1、--initialize初始化之后会给root用户生成一个随机密码(可以在/usr/local/mysql/mysql-error.log里看到,也可以使用cat /usr/local/mysql/mysql-error.log | grep password。),如果想默认无密码,可以在--initialize后面加上-insecure。
  4. #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/mysql8/bin/mysqld_safe  --defaults-file=/etc/my.cnf --user=mysql


 

MySQL服务加入systemctl管理

永久关闭SELinux

  1. #修改配置文件
  2. [root@dxm system]# vi /etc/selinux/config
  3. #这里SELINUX默认值是Enforcing,这里我们设置配置项为:
  4. SELINUX=disabled
  5. *然后重启机器*
  6. #修改/etc/sysconfig/selinux 这个文件也是一样的,因为它其实就是/etc/selinux/config的符号链接
  7. [root@dxm system]# ll /etc/sysconfig/selinux
  8. lrwxrwxrwx. 1 root root 17 123 16:27 /etc/sysconfig/selinux -> ../selinux/config

创建mysql.service文件

vim /usr/lib/systemd/system/mysql.service
  1. #内容如下:
  2. [Unit]
  3. Description=MySQL
  4. SourcePath=/etc/init.d/mysql
  5. Before=shutdown.target
  6. [Service]
  7. User=mysql
  8. Type=forking
  9. TimeoutSec=0
  10. PermissionsStartOnly=true
  11. ExecStart=/usr/local/mysql/mysql8/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --daemonize
  12. ExecStop=/etc/init.d/mysql stop
  13. LimitNOFILE = 65535
  14. Restart=on-failure
  15. RestartSec=10
  16. RestartPreventExitStatus=1
  17. PrivateTmp=false
  18. [Install]
  19. WantedBy=multi-user.target

MySQL服务设置为开机自启动

  1. # disabled为非开机自启动状态,enabled为开机自启动状态。执行:
  2. [root@dxm system] systemctl list-unit-files | grep mysql
  3. mysql.service disabled
  4. # 设置为开机自启动
  5. [root@dxm system] systemctl enable mysql.service
  6. Synchronizing state of mysql.service with SysV service script with /usr/lib/systemd/systemd-sysv-install.
  7. Executing: /usr/lib/systemd/systemd-sysv-install enable mysql
  8. [root@dxm system] /usr/lib/systemd/systemd-sysv-install enable mysql
  9. #再来查看是否为开机自启动状态
  10. [root@dxm system] systemctl list-unit-files | grep mysql
  11. mysql.service enabled
  12. # 查看并记录当前mysql的pid,用于重启之后对比
  13. [root@dxm system] ps aux | grep mysql
  14. # 重启服务器(注意:谨慎使用)
  15. [root@dxm system] reboot
  16. # 重启完成之后再检查mysql服务是否启动完成
  17. [root@dxm system] ps aux | grep mysql

更改密码并授予远程访问权限:

  查看初始化随机生成的root密码

cat /usr/local/mysql/mysql-error.log | grep password

 安全设置  (上次没执行成功)

mysql_secure_installation

mysql登录

mysql -uroot -p //随机密码登录

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

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

问题2:此时输入密码会出现错误

解决方法 

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

重置密码(Mysql8.0+有变化)

第一次登陆出现下面问题:代表密码太简单需要改写

解决:

  1. #第一次输入(上述问题的解决方法)
  2. set password='12345678';
  3. #先把root的旧密码置空
  4. use mysql;
  5. #先将root密码置空
  6. update user set authentication_string='' where user='root';
  7. #重置成新密码
  8. ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';

默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户。

修改root用户远程访问权限:

选择 mysql 数据库:use mysql;

在 mysql 数据库的 user 表中查看当前 root 用户的相关信息:

select host, user, authentication_string, plugin from user;


发现root的host是localhost,不是%哦,那我们就加个host是%的root账号:

  1. CREATE USER 'root'@'%' IDENTIFIED BY '新密码';
  2. 例如
  3. CREATE USER 'root'@'%' IDENTIFIED BY '12345678';
  1. 再查下用户
  2. select host, user, authentication_string, plugin from user;

可以看到已经新增了host为%的root用户

然后再执行:

GRANT ALL ON *.* TO 'root'@'%';

 mysql8的加密方式规则不一样,是caching_sha2_password

 把加密方式改成mysql_native_password就行了:

  1. ALTER USER '[用户名]'@'%' IDENTIFIED WITH mysql_native_password BY '[密码]';
  2. 例子:
  3. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';

加密方式以及改成了mysql_native_password: 

然后使用下面命令使修改生效:

flush privileges;

防火墙开放端口和阿里云安全组入方向规则

  1. 查看开放端口
  2. firewall-cmd --permanent --zone=public --list-ports
  3. firewall-cmd --permanent --zone=public --add-port=3306/tcp
  4. firewall-cmd --permanent --zone=public --add-port=8080/tcp
  5. (8080开不开不知道有没有啥影响,反正这个端口都会用到先开为敬)
  6. firewall-cmd --reload

添加阿里云安全组入方向规则

navicat访问

ip:服务器ip

端口号:3306

用户名:root

密码:自己设置的密码

所遇到的问题:·

安装启动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/mysql8/bin/mysql,我们则可以这样执行命令:

ln -s /usr/local/mysql/mysql8/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 {} ;命令查找都有哪些文件,然后把没用的文件,比如日志文件,删除掉,再尝试启动服务。

 几个systemctl常用的命令

  1. # 列出所有可用单元
  2. systemctl list-unit-files
  3. # 从可用单元中查看是否有mysql
  4. systemctl list-unit-files | grep mysql
  5. # 启动mysql服务
  6. systemctl start mysql.service
  7. # 查看mysql服务状态active即为启动状态,inactive是非启动状态
  8. systemctl status mysql.service
  9. # 重启mysql服务
  10. systemctl restart mysql.service
  11. # 停止mysql服务
  12. systemctl stop mysql.service

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/301228
推荐阅读
相关标签
  

闽ICP备14008679号