准备工作:

环境:linux

系统:centos6.4-x86-x64

安装工具:mysql-5.7.21-x86-64

软件下载:

mysql版本下载:点击打开链接


或者:mysql-5.7.21二进制包

或者linux下使用wget下载:

wget  -xp https://dev.mysql.com//Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz  /mysql

准备工作:

1.安装wget插件:

命令:sudo yum -y install wget

2.Centos6.4更换yum的源为阿里源
1.源所在目录:/etc/yum.repos.d/
备份源文件:
cp -rp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
2.下载新的CentOS-Base.repo到/etc/yum.repos.d/
CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
3.yum clean all
4.yum makecache

到此源安装完成

linux安装mysql方式有很多,这里本人安装方式为二进制安装方式,个人喜欢的原因:安装目录根据自己喜好,配置自己配置。

检查操作系统上是否已经安装了mysql数据库
rpm -qa|grep mysql
显示版本:
mysql57-community-release-el7-8.noarch
删除已经存在的版本
rpm -e --nodeps mysql57-community-release-el7-8.noarch
检查删除是否成功
rpm -qa|grep mysql
查看yum上提供的mysql数据库版本

yum list|grep mysql

若你的系统上已经安装了mysql如现有mysql版本是5.6,现在想安装mysql5.7版本则可以进行如下操作:

#检查mysql

find / -name mysql 

#删除已经安装的mysql

find / -name "*mysql*" | xargs rm -rf

注意:卸载后/etc/my.cnf不会删除,需要进行手工删除

rm -rf /etc/my.cnf

将下载的安装包"mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz"利用xftp上传至/opt目录下,然后解压,重新命名,移动mysql目录下

tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz 
mv mysql-5.7.21-linux-glibc2.12-x86_64 mysql-5.7.21 
mkdir mysql 
mv /opt/mysql-5.7.21 /opt/mysql

以下截图为我本地mysql5.7.21目录(/opt/mysql/mysq-5.7.21)

在上图该目录下创建data目录,用于数据库存放

cd /opt/mysql/mysql-5.7.21 
#创建data目录,数据库存放目录 
mkdir data 
ls -l

如下截图:


创建mysql用户组和mysql用户

#查看有没有mysql组 
cat /etc/group | grep mysql 
查看有没有mysql用户 
cat /etc/passwd |grep mysql 
若没有则创建mysql组 
#创建mysql用户组 
groupadd mysql 
#创建mysql用户并添加到mysql用户组中(//useradd -r参数表示mysql用户是系统用户,不可用于登录系统;第一个mysql是用户组,第二个mysql是用户)  
useradd -r -g mysql mysql 
#检查用户组是否创建成功 
groups mysql

设置mysql目录访问权限,用户组

#将mysql目录访问权限赋为myql用户 
chown -R mysql /opt/mysql/mysql-5.7.21/ 
#改变mysql目录的用户组属于mysql组 
chgrp -R mysql /opt/mysql/mysql-5.7.21/ 
#查看mysql目录下所有的目录及文件夹所属组合用户 
cd /opt/mysql/mysql-5.7.21 
ls -l

效果如下截图:会发现这里的用户,用户组均发生了改变,均由root变成mysql用户,用户组


创建以下文件,设置访问权限,用于mysql配置中

创建文件/tmp/mysql.sock 
赋值权限: 
chown -R mysql:mysql /tmp/mysql.sock 
chmod 755 /opt/mysql-5.7.21/tmp/mysql.sock 
创建文件:/opt/mall/mysql/log/mysqld.log 
赋值权限: 
chown -R mysql:mysql /opt/mall/mysql/log/mysqld.log 
chmod 755 /opt/mall/mysql/log/mysqld.log 
创建文件:/opt/mall/mysql/run/mysqld.pid 
赋值权限: 
chown -R mysql:mysql /opt/mall/mysql/run/mysqld.pid 
chmod 755 /opt/mall/mysql/run/mysqld.pid 
 
备注:
chmod:用于改变文件或目录的访问权限,一般用来用户用它控制文件或目录的访问权限
chmod 755 /tmp/mysql.sock 
chown:将某个目录下文件及目录修改为某个用户组
chgrp:将某个目录下文件及目录修改为某个组
-R处理指定目录以及其子目录下的所有文件
chown -R mysql .把当前目录下文件及目录的属主改为mysql用户
chgrp -R mysql .把当前目录下文件及目录所属组改为mysql组

安装和初始化数据库

cd /opt/mysql/mysql-5.7.21 
bin/mysqld --initialize --user=mysql --basedir=/opt/mysql/mysql-5.7.21 --datadir=/opt/mysql/mysql-5.7.21/data

执行后报:


错误信息:
error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
解决方法:
原因:
yum安装的是libnuma.so.1,但安装时默认安装的是32的,而db2需要的是64位的
1.如果已经安装了libnuma.so.1,先yum remove libnuma.so.1

2.安装依赖包 yum -y install numactl.x86_64


备注:
SLES 11:从MySQL 5.7.19开始,Linux通用tar包的格式是EL6而不是EL5,以致于MySQL客户端bin/mysql需要libtinfo.so.5

安装好依赖包后继续执行得到如下截图。注意最后一行,是mysql初始密码


配置SSL参数

cd /opt/mysql/mysql-5.7.21 
bin/mysql_ssl_rsa_setup --datadir=/opt/mysql/mysql-5.7.21/data

由于mysql-5.7.21版本my.cnf不在/support-files下,故我们创建my.cnf文件,复制如下内容:

touch /etc/my.cnf 
vim /etc/my.cnf 
 
[mysqld] 
character_set_server=utf8 
init_connect='SET NAMES utf8' 
basedir=/opt/mysql/mysql-5.7.21 
datadir=/opt/mysql/mysql-5.7.21/data 
port = 3306 
socket=/tmp/mysql.sock 
log-error=/opt/mall/mysql/log/mysqld.log 
pid-file=/opt/mall/mysql/run/mysqld.pid  
#表名不区分大小写 
lower_case_table_names = 1 
max_connections=5000 
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

注意:

这里面配置sql_mode模式为:

sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

这样做的原因:由于mysql版本升级,MySQL 5.6以后timestamp设定默认值规则改变,不能为”0000 00-00 00:00:00”故sql_mode不能设置为这样:

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

若是sql_mode是这样的形式则使用mysql客户端将一个数据库复制到另一个数据库会报如下错误:



启动mysql(命令行方式)

cd /opt/mysql/mysql-5.7.21 
bin/mysqld_safe --user=mysql &

配置mysql自动启动(可根据需要配置)

cd /opt/mysql/mysql-5.7.21 
cp support-files/mysql.server /etc/init.d/mysql 
因为mysql是安装在/opt/mysql/mysql-5.7.21下故需要修改/etc/init.d/mysql文件的mysql安装路径 
vim /etc/init.d/mysql 
basedir=/opt/mysql/mysql-5.7.21 
datadir=/opt/mysql/5.7.21/data 
#增加mysql服务控制脚本执行权限 
chmod +x /etc/init.d/mysql  
#通过chkconfig命令将mysqld服务加入到自启动服务中 
chkconfig --add mysql 
#开启自启动服务 
chkconfig mysql on 
#查看是否添加成功 
chkconfig --list mysql



若配置了mysql自启动方式则可以使用服务方式启动mysql

#查看mysql状态 
/etc/init.d/mysql status 或者 service mysql status 
#启动mysql 
/etc/init.d/mysql start 或者 service mysql start 
#停止mysql 
/etc/init.d/mysql stop 或者 service mysql stop 
#重新启动mysql 
/etc/init.d/mysql restart 或者 service mysql restart 
查看mysql服务说明启动成功 
ps -ef|grep mysql


配置mysql环境变量( 在文件的末尾添加,注意必须配置mysql环境变量否则mysql客户端工具连接不了):
vim /etc/profile 
export PATH=/opt/mysql/mysql-5.7.21/bin:$PATH
或者 
echo "export PATH=$PATH:/opt/mysql/mysql-5.7.21/bin" >> /etc/profile


设置环境变量立即生效(若该句不执行则重新启动服务器后配置的mysql环境变量失效)

source /etc/profile
把mysql客户端放到默认路径:

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


注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysql
软链接的意思就是给mysql客户端创建快捷方式


修改mysql初始密码
cd /opt/mysql/mysql-5.7.21/bin 
./mysql -u root -p 
密码上面生成的临时密码 :34=y7&/MsmJe 
mysql>set password=password("newpassword"); 
或者 mysql -u root -p #登录mysql 
#查看mysql版本 
mysql> select version(); 
#查看数据库 
mysql> show databases;
密码上面生成的临时密码 :34=y7&/MsmJe


设置远程登录 (一定要保证进入mysql状态下)
[[email protected] mysql-5.7.21]# mysql -u root  -p 
mysql>use mysql; 
mysql>update  user  set host='%' where user='root'; 
mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypwd' WITH GRANT OPTION; 
mysql>FLUSH PRIVILEGES;   
mysql>exit; 
#重新启动mysql 
service mysql restart;

测试远程连接是否正常:


这是因为linux防火墙没有关闭或者防火墙开启状态下没有对外开放mysql3306端口号

查看是否开启3306端口号

netstat -an|grep 3306

或者 

netstat -ntpl #查看防火墙对外开放端口情况

解决方法:

方法一:直接关闭防火墙

chkconfig iptables off #重启后永久生效

方法二:开启防火墙的情况下,通过命令方式或者配置文件方式开放防火墙对外端口

#开启防火墙 
chkconfig iptables on 
#开启3306端口号 
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 
#保存开启的端口号 
service iptables save 
#重新启动防火墙 
service iptables restart

通过修改配置文件开启端口号

vi /etc/sysconfig/iptables 
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 
#重新启动防火墙 
service iptables restart


备注:若使用第二种方式则首先开启防火墙,然后使用命令方式或者配置文件方式,二选一
不同系统防火墙对外开放端口具体方法参考:防火墙开放端口方法
网络其他参考:网络方法防火墙开放端口


测试远程是否正常连接

windows+R--cmd
mysql -h 192.168.174.128 -u root -p

输入密码




发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Linux配置CentOS永久IP地址详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。