1. 查看是否安装mysql
安装mysql之前,需要查看是否安装了mysql,如果安装则进行卸载,命令:
rpm -qa | grep mysql
卸载命令:
rpm -e --nodeps mysql-*
查看是否安装mariadb数据库,如果存在,则卸载,命令:
rpm -qa | grep mariadb
rpm -e --nodeps mariadb-libs-5.5.35-3.el7.x86_64
2. 下载mysql安装包
结合命令cat /etc/system-release
和getconf LONG_BIT
查看需要下载的mysql包,命令分别表示系统发行版本和位数。
下载地址:点击访问>mysql官方下载地址<
操作系统可选Linux - Generic
,这个下面的安装包是通用的。
本文以mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
为例。链接地址:https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
3. 解压及配置文件
把下载的安装包放到/data/mysql
下并进行解压,然后把解压后的文件重命名为mysql
:
[root@% mysql]# pwd
/data/mysql
[root@% mysql]# ls
mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
[root@% mysql]# tar -zxvf mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
[root@% mysql]# mv mysql-5.7.14-linux-glibc2.5-x86_64 mysql
[root@% mysql]# ls
mysql mysql-5.7.14-linux-glibc2.5-x86_64.tar.gz
复制配置文件并编辑,把mysql
下的配置文件覆盖到/etc/my.cnf
,并修改/etc/my.cnf
内容:
[root@% support-files]# pwd
/data/mysql/mysql/support-files
[root@% support-files]# ls
magic my-default.cnf mysqld_multi.server mysql-log-rotate mysql.server
[root@% support-files]# cp /data/mysql/mysql/support-files/my-default.cnf /etc/my.cnf
[root@% support-files]# vin /etc/my.cnf
配置内容如下,可根据需要增加其他配置:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
basedir=/data/mysql/mysql
datadir=/data/mysql/mysql/data
port=3306
user=mysql
# 允许最大连接数
max_connections=400
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 排序规则
collation_server=utf8mb4_general_ci
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
max_allowed_packet=16M
#linux不区分表大小写0区分1不区分
lower_case_table_names=1
#log-error=/var/log/mariadb/mariadb.log
log-error=/data/mysql/mysql/log/mysql.err
pid-file=/data/mysql/mysql/mysql.pid
# 开启binlog需要指定server-id
server_id=1
# binlog文件的前缀
log-bin=mysql-bin
# binlog文件保存的天数,默认0表示永久保存
expire_logs_days=15
# 缓存大小,一般生产服务器需要配置,建议为服务器总内存50%,默认128M
innodb_buffer_pool_size=4G
innodb_flush_log_at_trx_commit=1
# socket=/var/lib/mysql/mysql.sock
# 建议就放在这个位置,登录mysql时会从这里找mysql.sock
socket=/tmp/mysql.sock
innodb_data_file_path = ibdata1:1G;ibdata2:12M:autoextend:max:5G
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
创建mysql用户组及权限
创建mysql
用户组和用户并修改权限:
[root@% mysql]# groupadd mysql
[root@% mysql]# useradd -r -g mysql mysql
[root@% mysql]# chown -R mysql:mysql /data/mysql/mysql
初始化数据库
进入bin
目录并执行初始化命令:
[root@% bin]# pwd
/data/mysql/mysql/bin
[root@% bin]# ./mysqld --defaults-file=/etc/my.cnf --basedir=/data/mysql/mysql/ --datadir=/data/mysql/mysql/data/ --user=mysql --initialize
PS:如果运行了命令没输出,查看/mysql/mysql/data
目录和/data/mysql/mysql/log
目录下没有文件,那就是初始化失败了,可能是/etc/my.cnf
配置文件写错了。
按照上面的配置文件,可能是log-error
的配置导致的失败,把log-error
放到[mysqld_safe]
块下再试试。具体原因可以自己搜搜。
查看初始化root密码
[root@% bin]# cat /data/mysql/mysql/log/mysql.err
设置mysql环境变量
把/data/mysql/mysql/bin
加入到环境变量中,在末尾追加:
export PATH=/data/mysql/mysql/bin:$PATH
使用source /etc/profile
使其生效。
如果配置后,使用mysql
命令提示bash: mysql: command not found...
,那么再添加一个软连接:
[root@% bin]# ln -s /data/mysql/mysql/bin/mysql /usr/bin
设置开机自启
[root@% bin]# cp /data/mysql/mysql/support-files/mysql.server /etc/init.d/mysql
[root@% bin]# cp /data/mysql/mysql/support-files/mysql.server /etc/rc.d/init.d/mysql
增加 mysql
服务控制脚本执行权限
[root@% bin]# chmod +x /etc/rc.d/init.d/mysql
将 mysql
服务加入到系统服务
[root@% bin]# chkconfig --add mysql
启/停/登录
[root@% bin]# service mysql start
[root@% bin]# service mysql stop
[root@% bin]# service mysql restart
[root@% bin]# mysql -uroot -p
重置root密码
第一次使用root
登录,其密码在/data/mysql/mysql/log/mysql.err
里面。
查看初始化root密码
[root@% bin]# cat /data/mysql/mysql/log/mysql.err
登录mysql并修改root密码
[root@% bin]# mysql -uroot -p
# 123456是root的新密码
mysql> set password for root@localhost = password('123456');
如果你丢失了初始密码,那么可以在/etc/my.cnf
中添加skip_grant_tables=1
配置,先跳过权限验证,重启mysql
,然后修改root
密码。
跳过权限验证后直接进入mysql
命令:
># mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.14 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show database;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> update mysql.user set authentication_string=password('123456') where user='root' and host='localhost';
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
然后再把/etc/my.cnf
中的skip_grant_tables=1
配置去掉,重启mysql
。
创建数据库
create schema test_database default character set utf8;
这里的character
最好和my.cnf
中的保持一致,一般都是utf8
或utf8mb4
。
新增远程访问用户
一般来说是不建议将root
用户对外开放,也就是mysql.user
表Host
的保持设置为localhost
。
需要远程访问,可以新增用户:
# 切到mysql数据库
mysql> use mysql;
# 方式1. 如果用户名不存在,该命令会直接创建用户(mysql5.x版本还可以这样搞)
mysql> grant all privileges on *.* to 'account1'@'%' identified by '123456' with grant option;
# 方式2. 先创建用户再赋予权限(不知道哪个版本开始需要先创建用户才行)
mysql> create user 'account1'@'%' identified by '123456';
mysql> grant all privileges on *.* to 'account1'@'%' with grant option;
# 刷新权限
mysql> flush privileges;
模板语句:
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
# 或
create user '用户名'@'IP地址' identified by '密码';
grant all privileges on 库名.表名 to '用户名'@'IP地址' with grant option;
说明:
参数 | 参数说明 | 示例 |
---|---|---|
库名 | 要远程访问的数据库名称,所有的数据库使用“*” | test |
表名 | 要远程访问的数据库下的表的名称,所有的表使用“*” | student |
用户名 | 要赋给远程访问权限的用户名称 | account1 |
IP地址 | 可以远程访问的电脑的IP地址,所有的地址使用“%” | % |
密码 | 要赋给远程访问权限的用户对应使用的密码 | 123456 |
扩展:
grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接。
‘连接口令’不能为空,否则创建失败
远程连接不上问题
如果远程连接出现如下错误:
2013 - Lost connection to MySQL server at 'reading initial communication packet', system error: 0"Internal error /check (Not system error)"
需要在my.cnf
配置文件中的[mysqld]
下加上属性skip-name-resolve
[mysqld]
skip-name-resolve
......
开启定时备份
MySQL备份是很必要的事情,所以这里简单介绍一种定时备份的方法。
找一个空间足够的目录,比如/data/mysql
,新建备份脚本backup.sh
:
time=$(date -d "today" +"%Y%m%d")
/data/mysql/mysql/bin/mysqldump -uroot -p123456 --single-transaction --hex-blob --routines --events --triggers --master-data=2 --set-gtid-purged=OFF --databases yourDataBaseName --max_allowed_packet=512M > /data/mysql/backup/database_$time.sql
其中,yourDataBaseName
是你要备份的数据库名称。
赋予执行权限:
# chmod u+x /data/mysql/backup.sh
编辑crontab
:
# crontab -e
30 00 * * * sh /data/mysql/backup.sh >> /data/mysql/backup.log 2>&1
该cron
表示每天0点30分执行脚本,将日志输出到/data/mysql/backup-log.log
。
查看crontab
:
# crontab -l
– end –