准备工作:
环境: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
备注:安装和初始化数据库
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
备注:安装好依赖包后继续执行得到如下截图。注意最后一行,是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
注意:建议使用软链过去,不要直接包文件复制,便于系统安装多个版本的mysqlcd /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
[root@admin 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输入密码