MySQL 的安装方式一般分为三种:
- 二进制版本
- 编译版本
- RPM 包
比较常见的是二进制版本安装,方便简单,相对于编译安装,如果不是追求极致性能,使用起来差别不大。
本次教程以二进制版本为例,系统为红帽7.4
或者Centos7.4,MySQL 版本为5.7.34
。
下载安装包
先去官网下载二进制安装包,进入官网下载页面 mysql下载页面,点击下载 5.7.34二进制64位版本
下载完成,把安装包移到目标 Linux服务器下。
环境准备
1. 安装linux依赖包
查看安装文档
在下载页面上面有安装指南
翻译大概是,mysql依赖libaio这个library。如果没有安装,那么安装会失败。
安装命令:yum install libaio numactl ncurses-devel autoconf
删除自带的mariadb,卸载后/etc/my.cnf将不存在!!!初始化及启动要自己指定参数,不推荐卸载!!!
#查找是否安装mariadb
rpm -qa|grep mariadb
#卸载mariadb
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
2. 创建用户以及用户组
#添加一个用户组
groupadd mysql
#添加一个用户
useradd -m -r -g mysql mysql
3. 配置 ulimit
我们一般使用 mysql 用户启动数据库,如果不设置文件打开数和进程数,后期会有问题
打开 /etc/security/limits.conf
文件,在文件末尾写上
mysql soft nproc 65536
mysql hard nproc 65536
mysql soft nofile 131072
mysql hard nofile 131072
打开 /etc/security/limits.d/20-nproc.conf
把参数调整为
* soft nofile 65536
* hard nofile 65536
* soft nproc 131072
* hard nproc 131072
4.设置服务器主机名,并且添加到hosts中.
# echo "ip 名称" >> /etc/hosts
echo "10.143.87.22 WYDSJ-gpapp04" >> /etc/hosts
5.开启时间同步
时间同步对于数据库来说非常重要,请保证所有数据库节点时间是一致的
可自行选择ntp时间同步或者chrony时钟同步,这里步骤省略
6.关闭 selinux
selinux 可能会造成无法写入数据,如果对它不熟悉,建议关掉
查看 selinux 状态
getenforce
临时关闭
setenforce 0
永久关闭
打开 /etc/sysconfig/selinux
SELINUX=enforcing
改为 SELINUX=disabled
安装配置
这次安装数据目录为 /data4/mysql_db/
,日志目录为 /data4/mysql_log/
,启动用户为 mysql
1. 解压文件
把二进制文件解压出来,放到 /user/local/
目录下
# 将tar压缩文件解压到当前文件夹
tar -zxvf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
# 把解压后的文件软连接mysql,软连接mysql文件在/usr/local下面,或者重命名也可以
# 做软链主要是方便日后升级和管理目录
ln -s /usr/local/mysql-5.7.34-linux-glibc2.12-x86_64 /usr/local/mysql
# 改变当前文件夹所属用户
cd /usr/local/mysql
chown -R mysql ./
2.创建数据和日志目录
mkdir -p /data4/mysql_db/
mkdir -p /data4/mysql_log/
# 授权
chown mysql:mysql -R /data4/mysql*
3.安装配置模块解读
[client]: 所有mysql客户端程序读取的配置块,包括bin下面的很多工具,例如mysql、mysqladmin、mysqlcheck、mysqldump、mysqlimport、mysqlshow、mysqlslap。
[mysqldump]: 只有mysqldump这个客户端程序才会读取的配置文件。
[mysql]: 只有mysql这个客户端程序才会读取的配置块,即mysql命令行。
[server]: 所有服务端如mysqld会读取的配置块。
[mysqld]: mysql服务端程序mysqld 和 mysqld_safe ,mysqld_multi 的配置文件。
配置,修改/etc/my.cnf文件,此文件作为初始化和启动时的参数,启动时也可自我指定
# my.cnf
# 客户端设置,即客户端默认的连接参数
[client]
# 默认连接端口
port = 3306
# 编码
default-character-set = utf8
# 用于本地连接的socket套接字,这个不同于上面mysqld中的socket,如果这个不写执行mysql -uroot -p会报错
socket = /data4/mysql_db/mysql.sock
[mysqld]
# 指定basedir,启动时就不用指定basedir了
basedir = /usr/local/mysql
# 指定数据存储目录
datadir = /data4/mysql_db
tmpdir = /tmp
socket = /data4/mysql_db/mysql.sock
# user=mysql
pid-file = /data4/mysql_db/mysql.pid
skip-external-locking = 1
skip-name-resolve = 1
port = 3306
server_id = 1
default-storage-engine = InnoDB
character_set_server=utf8
#character-set-server = utf8
default_password_lifetime=0
#### log ####
log_timestamps=system
binlog_cache_size = 16M
# 表示启用二进制日志
log_bin = /data4/mysql_log/mysql-bin
log_bin_index = /data4/mysql_log/mysql-bin.index
binlog_format = row
expire_logs_days = 15
relay_log_recovery=ON
relay_log=/data4/mysql_log/mysql-relay-bin
relay_log_index=/data4/mysql_log/mysql-relay-bin.index
log_error = /data4/mysql_log/mysql-error.log
log_queries_not_using_indexes = /data4/mysql_log/nouseindex.log
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data4/mysql_log/mysql-slow.log
#### innodb ####
innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 8
innodb_log_group_home_dir = /data4/mysql_log/
innodb_undo_directory = /data4/mysql_log/
innodb_undo_logs = 128
innodb_flush_neighbors = 1
innodb_log_file_size = 1G
innodb_file_per_table = on
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 64M
myisam_max_sort_file_size = 1G
myisam_repair_threads = 1
4.安装mysql命令-初始化mysql目录
# 初始化mysql,指定mysql的文件夹和data的文件夹,卸载mariadb后必须指定,basedir和basedata不指定默认用/etc/my.cnf文件里面的参数
# 其中 initialize-insecure 表示不生成MySQL数据库root用户的随机密码,即root密码为空;
/usr/local/mysql/bin/mysqld --initialize-insecure --basedir=/usr/local/mysql --datadir=/data4/mysql_db --user=mysql
/usr/local/mysql/bin/mysql_ssl_rsa_setup --basedir=/usr/local/mysql --datadir=/data4/mysql_db
5. 生成启动文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql.server
chmod 755 /etc/init.d/mysql.server
# vim /etc/init.d/mysql.server
6.启动mysql,连接测试
# 启动mysql,卸载mariadb后必须指定,--user也可以写在配置文件里,相当于./bin/mysqld_safe --defaults-file=/etc/my.cnf
/usr/local/mysql/bin/mysqld_safe --user=mysql &
ps:没有/etc/my.cnf的话一定要指定
查看是否启动成功:
ps -ef|grep mysql
连接测试数据库:
/usr/local/mysql/bin/mysql -uroot -p
(因为初始化为无密码,因此密码为空)
为了安全先设置一个密码
SET PASSWORD = PASSWORD('Tjcmcc@139.com');
set password for 'root'@'localhost' = password('Tjcmcc@139.com');
flush privileges;
7.关闭mysql
没有安装为服务时,使用此方法关闭mysql,输入密码后关闭成功:
/usr/local/mysql/bin/mysqladmin -u root -p shutdown
查看是否关闭成功:
ps -ef|grep mysql
8.mysql设置为服务
复制启动脚本到资源目录:
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
增加mysqld服务控制脚本执行权限
chmod +x /etc/rc.d/init.d/mysqld
将mysqld服务加入系统服务
chkconfig --add mysqld
检查mysqld服务是否生效
chkconfig --list mysqld
配置好后可以使用service命令控制mysql的启动和停止,命令为:service mysqld start
和service mysqld stop
9.配置全局环境变量
如果想要全局访问到 mysql 客户端,可以把 /usr/local/mysql/bin
加入系统路径,我这里采取直接创建软连接的方式
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
或者编辑/etc/profile文件
# 修改 /etc/profile
vi /etc/profile
# 在/etc/profile 文件底部添加如下两行配置,保存后退出
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
export PATH
# 设置环境变量立即生效
source /etc/profile
10.设置远程主机登录
# 其中*.* 的第一个*表示所有数据库名,第二个*表示所有的数据库表;
# root@'%' 中的root表示用户名,%表示ip地址,%也可以指定具体的ip地址,比如root@localhost,root@192.168.10.129
grant all on *.* to 'root'@'%' identified by 'Tjcmcc@139.com';
# 执行以下如下命令刷新权限:
flush privileges;