前言:
linux系统centos7.2,mysql版本5.7,网络上看了很多的教程,大部分都失败了,很多人写的安装步骤,都存在很多问题。这里就不一一说明了,这是一篇很优质的安装教程,一次通过,保证你女朋友看了都能一次成功。
一.前置准备
1.卸载旧版MySQL
注意如果是一个完整的centos系统可以不去安装相关依赖,但是对于不知道自己是否已安装相关依赖的可以执行安装命令(耗时可能会长)。这里附上一个centos7.2的系统地址,无需安装任何依赖,系统安装即用
地址:https://pan.baidu.com/s/1SRiVqTJCyHoaE1cxjiL_Tg
提取码:gh26
查看rpm包 rpm -qa|grep mysql 若有可用rpm -e卸载 查找mysql残留包,有则删除,没有则忽略 find / -name mysql 安装相关依赖 yum -y install make gcc-c++ cmake bison-devel ncurses-devel numactl libaio 创建用户和用户组 groupadd mysql useradd -s /sbin/nologin -g mysql -M mysql
二.下载二进制安装包并解压
这里的下载安装包可能会比较慢,提供一个网盘下载5.7.31的版本,亲测安装可用,其他步骤不变
地址:https://pan.baidu.com/s/1JwCtrIL7dsbaZexoBHboUw
提取码:4tub
cd /usr/local/ # wget下载或者本地下载后上传 wget https://downloads.mysql.com/archives/get/file/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz # 解压安装包 tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz # 解压后为了方便后面操作可把解压后文件名修改为mysql mv mysql-5.7.23-linux-glibc2.12-x86_64 mysql # 更改文件夹所属 chown -R mysql.mysql /usr/local/mysql/
三.创建mysql相关目录及文件
mkdir -p /data/mysql/{data,logs,tmp} # 更改文件夹所属 chown -R mysql.mysql /data/mysql/ # 创建mysql配置文件my.cnf,已存在的话直接将内容覆盖就行 vi /etc/my.cnf # 简单模板如下(可直接复制使用): [client] port = 3306 socket = /data/mysql/tmp/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /data/mysql/data port = 3306 socket = /data/mysql/tmp/mysql.sock pid-file = /data/mysql/tmp/mysqld.pid tmpdir = /data/mysql/tmp skip_name_resolve = 1 symbolic-links=0 max_connections = 2000 group_concat_max_len = 1024000 sql_mode = NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION lower_case_table_names = 1 log_timestamps=SYSTEM character-set-server = utf8 interactive_timeout = 1800 wait_timeout = 1800 max_allowed_packet = 32M binlog_cache_size = 4M sort_buffer_size = 2M read_buffer_size = 4M join_buffer_size = 4M tmp_table_size = 96M max_heap_table_size = 96M max_length_for_sort_data = 8096 #logs server-id = 1003306 log-error = /data/mysql/logs/error.log slow_query_log = 1 slow_query_log_file = /data/mysql/logs/slow.log long_query_time = 3 log-bin = /data/mysql/logs/binlog binlog_format = row expire_logs_days = 15 log_bin_trust_function_creators = 1 relay-log = /data/mysql/logs/relay-bin relay-log-recovery = 1 relay_log_purge = 1 #innodb innodb_file_per_table = 1 innodb_log_buffer_size = 16M innodb_log_file_size = 256M innodb_log_files_in_group = 2 innodb_io_capacity = 2000 innodb_io_capacity_max = 4000 innodb_flush_neighbors = 0 innodb_flush_method = O_DIRECT innodb_autoinc_lock_mode = 2 innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_buffer_pool_size = 2G
四.配置mysql.server
cd /usr/local/mysql/support-files cp mysql.server /etc/init.d/mysql vi /etc/init.d/mysql # 修改目录位置 basedir=/usr/local/mysql datadir=/data/mysql/data # 注册开机启动服务 chkconfig --add mysql chkconfig --list
五.添加环境变量
echo "PATH=$PATH:/usr/local/mysql/bin " >> /etc/profile source /etc/profile
六.初始化mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data # 临时密码保存在errlog中 # 获取临时密码,该密码第一次登陆mysql时会被使用,注意密码可能是分号结尾,一起复制 more /data/mysql/logs/error.log |grep password
七.启动mysql服务 并修改密码
# 启动mysql服务 service mysql start # 使用初始密码登录mysql服务 并修改密码,下面所示是将密码改为root mysql -uroot -p alter user 'root'@'localhost' identified by 'root'; flush privileges;
八.Navicat连接mysql问题10038
经常会报的问题就是10038,如下图
网上搜罗的解决方案主要是三种,如下
1.user表更改root用户的host值
在系统中登录mysql客户端,查看user表信息如下
mysql -u root -p # 登录成功后 use mysql; select user,host from user;
结果如下:
若是上方查出的结果root对应的host没有%,则需要更改(多个root,有一个对应了%就行),使用以下命令更改。
# 更改root的host值 update user set host = '%' where user = 'root'; # 刷新(改完一定要刷新) flush privileges;
这些做完,可尝试连接测试,若还是不行,继续第二种方法。
2.检查my.cnf配置文件的bind-address值
my.cnf配置文件一般存储在/etc/my.cnf这里,也可能不同,如果不清楚可以使用find -name 命令查看下该文件位置。操作如下所示
# 全盘查找my.cnf(若是用户权限不足,可切换root查找) find / -name my.cnf cd /etc/mysql/my.cnf vi my.cnf # 将以下内容 # bind-address=127.0.0.1 更改为以下内容 bind-address=0.0.0.0
以上操作完以后可继续测试以下是否可以连接成功,这部分不改的话,是远程连接不上去的,更改这块就是允许远程连接的。若是还是不行,九成就是防火墙的问题了。
3.查看防火墙状态,关闭防火墙
有部分端口号防火墙默认是不允许通过的,其中3306就是很常见的一个,所以我们在使用远程连接时,不可能连接的上。我们可以直接使用命令查看防火墙状态,关闭防火墙再测试一遍。如下:
注意:
不同系统,命令会有区别,若是系统不一致,可在查询下具体命令,centos6防火墙是iptables,centos7则是firewalld,操作命令也不同。
# 查看防火墙放行的端口 firewall-cmd --list-ports # centos7查看防火墙的状态 sudo systemctl status firewalld # centos7关闭防火墙(临时更改,重启失效) sudo systemctl stop firewalld # centos7打开防火墙(临时更改,重启失效) sudo systemctl start firewalld
若是还没有解决,建议使用方式4万能解决法,肯定解决的了,若是已经解决,上面的命令只是临时的关闭防火墙,这种方式肯定不可能永远解决问题。永久解决的方案有两种,一种是永久关闭防护墙,一种是让防火墙放行3306端口,建议使用防火墙放行3306端口的方案。操作如下:
centos7永久关闭防火墙
# 关掉系统重启时重新启动防火墙的功能 sudo systemctl disable firewalld # 关闭防火墙 sudo systemctl stop firewalld # 重启后生效 reboot
此时再重启,防火墙就是关闭的状态了,若是需要开启防火墙,命令如下
# 开启系统重启时重新启动防火墙的功能 sudo systemctl enable firewalld # 开启防火墙 sudo systemctl start firewalld # 重启后生效 reboot
让防火墙放行3306端口。
# 放行3306端口,然后一定要重启防火墙 firewall-cmd --zone=public --add-port=3306/tcp --permanent # 重启防火墙 systemctl restart firewalld.service # 再次查看端口有没有放行成功,下面出现3306就表示成功了 firewall-cmd --list-ports # 参数解释 # –zone 用以标识该端口放行的范围 # --add-port=3306/tcp 标识端口与通讯协议 # --permanent 标识重启放行依然生效
4.万能解决法
以上三种方法还是不行?别试了,从新装一个可能耗时都比找解决问题的时间短,使用文中提供的centos7.2,与mysql5.7.31的包从新安装(文中有网盘链接),按照上面的流程操作保证一遍过,在远程连接时没有连接上的话,直接关掉防火墙就可以,整个流程我都已经测试过,没有问题,希望对有困惑的小伙伴有所帮助。
总结
在经历了多次尝试后,搜了几个教程都是不对,最后才弄成,过程还是有些曲折,为了自己下次不再犯同样的错误,总结了这版安装到修复10038问题的文章,网上很多人提供教程文章,不说操作系统版本其实是没有意义的,就算都是centos不同版本都不一样,自己也引以为戒,操作时一定要根据版本来确定问题,不然即使搜到了大概率也是不能用的。
所以远程服务连接不上首先应该考虑的就是防火墙与配置文件是否允许了远程访问,bind:127.0.0.1是不允许远程访问的。
支持原创,本文参考了这篇文章。https://blog.csdn.net/wanghao112956/article/details/90748883