CentOs7.3 安装 MySQL 5.7.21 二进制版本及主从配置
CentOs7.3 安装 MySQL 5.7.21 二进制版本
1.准备工作
依赖环境
关闭防火墙
$ systemctl
stopfirewalld.service
MySQL依赖于libaio 库
$ yum search libaio
$ yum install libaio
下载,解压,重命名
通常解压在 /usr/local/mysql
把mysql-5.7.21-linux-glibc2.12-x86_64
文件夹,重命名成mysql
,这样就凑成/usr/local/mysql
目录了
cd
/opt/
wget
https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
tar -zxvf
/opt/mysql
-5.7.21-linux-glibc2
.12-x86_64.tar.gz -C
/usr/local/
$mv
/usr/local
/mysql-5.7.21-linux-glibc2.12-x86_64//usr/
local/mysql
解压目录内容
bin
mysqld服务器,客户端和实用程序
data
日志文件,数据库
docs
MySQL手册信息格式
man
Unix手册页
include
包含(标题)文件
lib
库
share
其他支持文件,包括错误消息,示例配置文件,用于数据库安装的SQL
2.安装MySQL
1. 新建用户组和用户
cd /usr/local/mysql/
groupadd mysql
useradd mysql -g mysql
2. 创建目录并授权
mkdir data mysql-files
chmod
750mysql-files
chown -R mysql .
chgrp -R mysql .
3. 初始化MySQL
$
bin/mysqld --initialize --user=mysql # MySQL 5.7.6 and up
注意密码
4. mysql 临时密码
[注意]root@localhost生成临时密码:;b;s;)/rn6A3
,也就是root@localhost:
后的字符串
2017-08-26T03:23:35.368366Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please
use--explicit_defaults_for_timestamp server option (see documentation for more details).
2017-08-26T03:
23:
35.748679Z
0[
Warning]
InnoDB:
Newlog
files created, LSN=
45790
2017-08-26T03:
23:
35.793190Z
0[
Warning]
InnoDB: Creating foreign
keyconstraint
system
tables.
2017-08-26T03:
23:
35.848286Z
0[
Warning]
Noexisting
UUIDhas been
found, so we assume that this
isthe
firsttime
that this
serverhas been started. Generating a
newUUID
: f210c54b
-8a0d
-11e7-abbd
-000c29129bb0.
2017-08-26T03:
23:
35.848889Z
0[
Warning] Gtid
tableis
not
ready
tobe used.
Table'mysql.gtid_executed'
cannot be opened.
2017-08-26T03:
23:
35.849421Z
1[Note] A
temporarypassword
is
generated
for
root@localhost: ;b;s;)/rn6A3
5. 生成RSA私钥,可以跳过此步骤
mysql_ssl_rsa_setup需要openssl支持,用于启用数据量ssl连接,需要进一步配置。
$ bin/mysql_ssl_rsa_setup
6. 授予读写权限
chown -R root .
chown -R mysql data mysql-files
7. 添加到MySQL 启动脚本到系统服务
$ cp support-files/mysql.server /etc/init.d/mysql.server
3.启动MySQL服务
给日志目录授予读写权限
mkdir/
var/
log/mariadb
touch /
var/
log/mariadb/mariadb.
log
chown -R mysql:mysql /
var/
log/mariadb
启动脚本有两个分别是:
/usr/local/mysql/bin/mysqld_safe
/usr/local/mysql/support-files/mysql.server
start
(即/etc/init.d/mysqld
)
当启动mysqld时,mysqld_safe
同时启动
mysqld_safe
监控mysqld
服务,记录错误日志,并在mysqld
因故障停止时将其重启
启动方式一
$ bin/mysqld_safe
--user=mysql &
启动方式二
$ service mysql
.serverstart
或者
/usr/
local/mysql/support-
files/mysql.server
start
如若出现报错
Starting MySQL.2017-08-26T07:31:24.312411Z mysqld_safe
error:
log-
errorset
to '/
var/
log/mariadb/mariadb.
log', however
filedon't exists. Create writable
foruser 'mysql'.
ERROR
! The server quit without updating PID
file(/
var/lib/mysql/node1.pid).
4.登录MySQL
$
vi/etc/my.
cnf
修改 [mysqld]
组下的 socket
路径,我是选择注释掉,加一行为tmp/mysql.soc
[mysqld]
datadir=/var/lib/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/tmp/mysql.sock
重启MySQL 服务
$ service mysql.server re
start
Shutting down MySQL..
SUCCESS!
再次登录
$
/usr/local
/mysql/bin
/mysql -uroot -p
如果不知道密码
密码在,安装MySQL步骤 4 ,有提到,怎么找初始化临时密码
设置MySQL密码
登陆成功后,设置MySQL密码
ALTER USER
'root'@
'localhost'identified
by 'mima@413';
或者
mysql> set password=password(
"mima@413")
;
刷新权限
flush privileges;
mysql>
exit;
查看mysql.user表中存在哪些帐户 以及它们的密码是否为空:
MySQL 5.7.6起,使用这个语句:
mysql>
SELECTUser
, Host,
HEX(authentication_string)
FROMmysql.user;
+
---------------+-----------+------------------------------------------------------------------------------------+
| User | Host | HEX(authentication_string) |
+
---------------+-----------+------------------------------------------------------------------------------------+
| root | localhost | 2A39383730334637413534333934344644333831383037373636394637344436303631364442324338 |
| mysql.session | localhost | 2A5448495349534E4F544156414C494450415353574F52445448415443414E42455553454448455245 |
| mysql.sys | localhost | 2A5448495349534E4F544156414C494450415353574F52445448415443414E42455553454448455245 |
+
---------------+-----------+------------------------------------------------------------------------------------+
开启远程登录
关闭防火墙
$ systemctl
stopfirewalld.service
以权限用户root登录
$
/usr/local
/mysql/bin
/mysql -uroot -p
use mysql;
updateuser
set
host =
'%'where
user
=
'root';
flushprivileges
;
第1行:选择mysql库
第2行:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址
第3行:刷新MySQL的系统权限相关表
或者
mysql>
grantall
privilegeson
*.*
to'root'
@
'%'identified
by
'mima'
with
grant
option
;
mysql>
flushprivileges
;
自启动
vim /etc/rc.local
添加systemctl start mysql
chmod +x /etc/rc.d/rc.local
搭建 MySQL 5.7.21 主从复制,以及复制实现细节分析
概念
主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步; 根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的表。
MySQL中主从复制的优点
横向扩展解决方案
在多个从库之间扩展负载以提高性能。在这种环境中,所有写入和更新在主库上进行。但是,读取可能发生在一个或多个从库上。该模型可以提高写入的性能(由于主库专用于更新),同时在多个从库上读取,可以大大提高读取速度。
数据安全性
由于主库数据被复制到从库,从库可以暂停复制过程,可以在从库上运行备份服务,而不会破坏对应的主库数据。
分析
可以在主库上创建实时数据,而信息分析可以在从库上进行,而不会影响主服务器的性能。
长距离数据分发
可以使用复制创建远程站点使用的数据的本地副本,而无需永久访问主库。
1.准备工作
Mysql版本:MySQL 5.7.19
Master-Server : 192.168.252.123
Slave-Server : 192.168.252.124
关闭防火墙
$ systemctl
stopfirewalld.service
安装 MySQL
参考 - CentOs7.3 安装 MySQL 5.7.19 二进制版本
首先在两台机器上装上,保证正常启动,可以使用
2. Master-Server 配置
修改 my.cnf
配置 Master 以使用基于二进制日志文件位置的复制,必须启用二进制日志记录并建立唯一的服务器ID,否则则无法进行主从复制。
停止MySQL服务。
$ service mysql
.serverstop
开启binlog ,每台设置不同的 server-id
vi /etc/
my.cnf
[mysqld]
log-bin=mysql-bin
server-
id=
1
启动MySQL服务
$ service mysql
.serverstart
登录MySQL
$
/usr/local
/mysql/bin
/mysql -uroot -p
创建用户
每个从库使用MySQL用户名和密码连接到主库,因此主库上必须有用户帐户,从库可以连接。任何帐户都可以用于此操作,只要它已被授予 REPLICATION SLAVE
权限。可以选择为每个从库创建不同的帐户,或者每个从库使用相同帐户连接到主库
虽然不必专门为复制创建帐户,但应注意,复制用到的用户名和密码会以纯文本格式存储在主信息存储库文件或表中 。因此,需要创建一个单独的帐户,该帐户只具有复制过程的权限,以尽可能减少对其他帐户的危害。
登录MySQL
$
/usr/local
/mysql/bin
/mysql -uroot -p
CREATEUSER
'replication'
@
'1.1.1.2'IDENTIFIED
BY
'mima@143'
;
GRANTREPLICATION
SLAVE
ON
*.*
TO'replication'
@
'1.1.1.2';
3.Slave-Server 配置
修改 my.cnf
停止MySQL服务。
$ service mysql
.serverstop
$ cat /etc/
my.cnf
[mysqld]
server-
id=
2
如果要设置多个从库,则每个从库的server-id与主库和其他从库设置不同的唯一值。
rm –f /var/
lib/mysql/auto.cnf
启动MySQL服务
$ systemctl restart mysql
登录MySQL
$
/usr/local
/mysql/bin
/mysql -uroot -p
配置主库通信
查看 Master-Server , binlog File 文件名称和 Position值位置并且记下来
mysql>
showmaster
status
;
+
------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+
------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 629 | | | |
+
------------------+----------+--------------+------------------+-------------------+
1 row in
set(
0.00sec)
要设置从库与主库进行通信,进行复制,使用必要的连接信息配置从库在从库上执行以下语句
将选项值替换为与系统相关的实际值
参数格式,请勿执行
mysql> CHANGE MASTER TO
-
> MASTER_HOST='master_host_name',
-
> MASTER_USER='replication_user_name',
-
> MASTER_PASSWORD='replication_password',
-
> MASTER_LOG_FILE='recorded_log_file_name',
-
> MASTER_LOG_POS=recorded_log_position;
mysql> CHANGE MASTER TO
-
> MASTER_HOST='192.168.252.123',
-
> MASTER_USER='replication',
-
> MASTER_PASSWORD='mima',
-
> MASTER_LOG_FILE='mysql-bin.000001',
-
> MASTER_LOG_POS=629;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
MASTER_LOG_POS=0
写成0 也是可以的
放在一行执行方便
CHANGE MASTER TOMASTER_HOST=
'1.1.1.1', MASTER_USER=
'replication', MASTER_PASSWORD=
'mima@143', MASTER_LOG_FILE=
'mysql-bin.000001', MASTER_LOG_POS=
154;
启动从服务器复制线程
mysql>
STARTSLAVE
;
Query OK,
0rows affected (
0.00sec)
查看复制状态
mysql>show
slave
status\G
***************************1.
row
***************************
Slave_IO_State:Waiting
for
master
to
send
event
Master_Host:192.168.252.123
Master_User:replication
Master_Port:3306
Connect_Retry:60
Master_Log_File:mysql-bin.000001
Read_Master_Log_Pos:629
Relay_Log_File:master2-relay-bin.000003
Relay_Log_Pos:320
Relay_Master_Log_File:mysql-bin.000001
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
......
检查主从复制通信状态
Slave_IO_State
#从站的当前状态
Slave_IO_Running
:
Yes
#读取主程序二进制日志的I/O线程是否正在运行
Slave_SQL_Running
:
Yes
#执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
Seconds_Behind_Master
#是否为0,0就是已经同步了
必须都是 Yes
如果不是原因主要有以下 4 个方面:
1、网络不通
2、密码不对
3、MASTER_LOG_POS 不对 ps
4、mysql 的 auto.cnf
server-uuid 一样(可能你是复制的mysql)
$ find / -name
'auto.cnf'
$ cat /var/
lib/mysql/auto.cnf
[auto]
server-uuid=
6b831bf3-
8ae7-
11e7-a178-
000c29cb5cbc
# 按照这个16进制格式,修改server-uuid,重启mysql即可
4.测试主从复制
启动MySQL服务
$ service mysql
.serverstart
登录MySQL
$
/usr/local
/mysql/bin
/mysql -uroot -p
在 Master-Server 创建测试库
CREATEDATABASE
`replication_wwww.ymq.io`
;
use`replication_wwww.ymq.io`
;
CREATETABLE
`sync_test`
(
`id`int
(
11)
NOTNULL
AUTO_INCREMENT,
`name`varchar
(
255)
NOTNULL
, PRIMARY
KEY(
`id`) )
ENGINE=
InnoDBAUTO_INCREMENT=
2DEFAULT
CHARSET
=utf8;
在 Slave-Server 查看是否同步过来
mysql>
showdatabases
;
+
-------------------------+
| Database |
+
-------------------------+
| information_schema |
| mysql |
| performance_schema |
| replication_wwww.ymq.io |
| sys |
+
-------------------------+
mysql>
usereplication_wwww.ymq.io
mysql>
showtables
;
+
-----------------------------------+
| Tables_in_replication_wwww.ymq.io |
+
-----------------------------------+
| sync_test |
+
-----------------------------------+
1 row in
set(
0.00sec)
一些命令
查看主服务器的运行状态
mysql>
showmaster
status
;
+
------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+
------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 1190 | | | |
+
------------------+----------+--------------+------------------+-------------------+
查看从服务器主机列表
mysql>
showslave
hosts
;
+
-----------+------+------+-----------+--------------------------------------+
| Server_id | Host | Port | Master_id | Slave_UUID |
+
-----------+------+------+-----------+--------------------------------------+
| 2 | | 3306 | 1 | 6b831bf2-8ae7-11e7-a178-000c29cb5cbc |
+
-----------+------+------+-----------+--------------------------------------+
获取binlog文件列表
mysql>
showbinary
logs
;
+
------------------+-----------+
| Log_name | File_size |
+
------------------+-----------+
| mysql-bin.000001 | 1190 |
+
------------------+-----------+
只查看第一个binlog文件的内容
mysql> mysql>
showbinlog
events
;
+
------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+
------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.19-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 | |
| mysql-bin.000001 | 420 | Anonymous_Gtid | 1 | 485 |
SET@@SESSION.GTID_NEXT=
'ANONYMOUS'|
| mysql-
bin.000001|
485|
Query|
1|
629|
GRANTREPLICATION
SLAVE
ON
*.*
TO'replication'
@
'192.168.252.124'|
| mysql-
bin.000001|
629| Anonymous_Gtid |
1|
694|
SET@@SESSION.GTID_NEXT=
'ANONYMOUS'|
| mysql-
bin.000001|
694|
Query|
1|
847|
CREATEDATABASE
`replication_wwww.ymq.io`
|
| mysql-
bin.000001|
847| Anonymous_Gtid |
1|
912|
SET@@SESSION.GTID_NEXT=
'ANONYMOUS'|
| mysql-
bin.000001|
912|
Query|
1|
1190|
use`replication_wwww.ymq.io`
;
CREATETABLE
`sync_test`
(
`id`int
(
11)
NOTNULL
AUTO_INCREMENT,
`name`varchar
(
255)
NOTNULL
, PRIMARY
KEY(
`id`) )
ENGINE=
InnoDBAUTO_INCREMENT=
2DEFAULT
CHARSET
=utf8 |
+
------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
查看指定binlog文件的内容
mysql> mysql>
showbinlog
events
in
'mysql-bin.000001'
;
+
------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+
------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| mysql-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.19-log, Binlog ver: 4 |
| mysql-bin.000001 | 123 | Previous_gtids | 1 | 154 | |
| mysql-bin.000001 | 420 | Anonymous_Gtid | 1 | 485 |
SET@@SESSION.GTID_NEXT=
'ANONYMOUS'|
| mysql-
bin.000001|
485|
Query|
1|
629|
GRANTREPLICATION
SLAVE
ON
*.*
TO'replication'
@
'192.168.252.124'|
| mysql-
bin.000001|
629| Anonymous_Gtid |
1|
694|
SET@@SESSION.GTID_NEXT=
'ANONYMOUS'|
| mysql-
bin.000001|
694|
Query|
1|
847|
CREATEDATABASE
`replication_wwww.ymq.io`
|
| mysql-
bin.000001|
847| Anonymous_Gtid |
1|
912|
SET@@SESSION.GTID_NEXT=
'ANONYMOUS'|
| mysql-
bin.000001|
912|
Query|
1|
1190|
use`replication_wwww.ymq.io`
;
CREATETABLE
`sync_test`
(
`id`int
(
11)
NOTNULL
AUTO_INCREMENT,
`name`varchar
(
255)
NOTNULL
, PRIMARY
KEY(
`id`) )
ENGINE=
InnoDBAUTO_INCREMENT=
2DEFAULT
CHARSET
=utf8 |
+
------------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
启动从库复制线程
mysql>
STARTSLAVE
;
Query OK, 0 rows affected, 1 warning (0.00 sec)
停止从库复制线程
mysql>
STOPSLAVE
;
Query OK, 0 rows affected (0.00 sec)
5.复制实现细节分析
MySQL主从复制功能使用三个线程实现,一个在主服务器上,两个在从服务器上
1.Binlog转储线程。
当从服务器与主服务器连接时,主服务器会创建一个线程将二进制日志内容发送到从服务器。
该线程可以使用 语句 SHOW PROCESSLIST
(下面有示例介绍) 在服务器 sql 控制台输出中标识为Binlog Dump线程。
二进制日志转储线程获取服务器上二进制日志上的锁,用于读取要发送到从服务器的每个事件。一旦事件被读取,即使在将事件发送到从服务器之前,锁会被释放。
2.从服务器I/O线程。
当在从服务器sql 控制台发出 START SLAVE
语句时,从服务器将创建一个I/O线程,该线程连接到主服务器,并要求它发送记录在主服务器上的二进制更新日志。
从机I/O线程读取主服务器Binlog Dump线程发送的更新 (参考上面 Binlog转储线程 介绍),并将它们复制到自己的本地文件二进制日志中。
该线程的状态显示详情 Slave_IO_running 在输出端 使用 命令SHOW SLAVE STATUS
使用\G
语句终结符,而不是分号,是为了,易读的垂直布局
这个命令在上面 查看从服务器状态 用到过
mysql> SHOW
SLAVESTATUS\G
3.从服务器SQL线程。
从服务器创建一条SQL线程来读取由主服务器I/O线程写入的二级制日志,并执行其中包含的事件。
在前面的描述中,每个主/从连接有三个线程。主服务器为每个当前连接的从服务器创建一个二进制日志转储线程,每个从服务器都有自己的I/O和SQL线程。
从服务器使用两个线程将读取更新与主服务器更新事件,并将其执行为独立任务。因此,如果语句执行缓慢,则读取语句的任务不会减慢。
例如,如果从服务器开始几分钟没有运行,或者即使SQL线程远远落后,它的I/O线程也可以从主服务器建立连接时,快速获取所有二进制日志内容。
如果从服务器在SQL线程执行所有获取的语句之前停止,则I/O线程至少获取已经读取到的内容,以便将语句的安全副本存储在自己的二级制日志文件中,准备下次执行主从服务器建立连接,继续同步。
使用命令 SHOW PROCESSLIST\G
可以查看有关复制的信息
命令 SHOW FULL PROCESSLISTG
在 Master 主服务器执行的数据示例
mysql>SHOW
FULL
PROCESSLIST\G
***************************1.
row
***************************
Id:22
User:repl
Host:node2:39114
db:NULL
Command:Binlog
Dump
Time:4435
State:Master
has
sent
all
binlog
to
slave;
waiting
for
more
updates
Info:
NULL
Id: 22是Binlog Dump服务连接的从站的复制线程
Host: node2:39114 是从服务,主机名 级及端口
State: 信息表示所有更新都已同步发送到从服务器,并且主服务器正在等待更多更新发生。
如果Binlog Dump在主服务器上看不到 线程,意味着主从复制没有配置成功; 也就是说,没有从服务器连接主服务器。
命令 SHOW PROCESSLISTG
在 Slave 从服务器,查看两个线程的更新状态
mysql>SHOW
PROCESSLIST\G
***************************1.
row
***************************
Id:6
User:system
user
Host:
db:NULL
Command:Connect
Time:6810
State:Waiting
for
master
to
send
event
Info:NULL
***************************2.
row
***************************
Id:7
User:system
user
Host:
db:NULL
Command:Connect
Time:3069
State:Slave
has
read
all
relay
log;
waiting
for
more
updates
Info:NULL
Id: 6是与主服务器通信的I/O线程
Id: 7是正在处理存储在中继日志中的更新的SQL线程
在
运行 SHOW PROCESSLIST
命令时,两个线程都空闲,等待进一步更新
如果在主服务器上在设置的超时,时间内 Binlog Dump线程没有活动,则主服务器会和从服务器断开连接。超时取决于的 服务器系统变量 值 net_write_timeout(在中止写入之前等待块写入连接的秒数,默认10秒)和 net_retry_count;(如果通信端口上的读取或写入中断,请在重试次数,默认10次) 设置 服务器系统变量
该SHOW SLAVE STATUS语句提供了有关从服务器上复制处理的附加信息。请参见 第16.1.7.1节“检查复制状态”。
mkdir -p /home/tool/mysql
cd /home/tool/mysql
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
tar -vxf mysql-5.7.18-1.el7.x86_64.rpm-bundle.tar
wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libaio-0.3.107-10.el6.x86_64.rpm
rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm
在大多数情况下,你只需要安装MySQL-server和MySQL-client安装包就可以安装上一个标准功能的MySQL。对于一个标准安装来说,其他的安装包不是必需的。
怎么样,明白了吧?我们需要安装的是mysql-community-client-5.7.9-1.el7.x86_64.rpm和mysql-community-server-5.7.9-1.el7.x86_64.rpm。当然为了不浪费口舌,我就直接说了。安装时候会提示与已经安装的RPM包有冲突,所以我们先卸载一些RPM包,要卸载哪些呢?
我们要卸载的是包含有mariadb关键字的RPM包,
执行命令:
rpm -qa|grep mariadb 来查看一下我们要卸载哪些软件
既然知道了是哪些RPM包,就开始卸载吧!执行命令:
rpm -e --nodeps mariadb-libs-5.5.41-2.el7_0.x86_64
rpm -e --nodeps mariadb-server-5.5.41-2.el7_0.x86_64
rpm -e --nodeps mariadb-5.5.41-2.el7_0.x86_64
看下图:
- 卸载完了,我们就开始安装吧!安装前,先讲一下,虽然官方文档说安装mysql-community-client-5.7.9-1.el7.x86_64.rpm和mysql-community-server-5.7.9-1.el7.x86_64.rpm就可以获得标准功能的MySQL。但是由于RPM包的依赖关系,所以实际上我们还要多装2个RPM包:mysql-community-common-5.7.9-1.el7.x86_64.rpm和mysql-community-libs-5.7.9-1.el7.x86_64.rpm。
- 依次执行命令:
rpm -ivh mysql-community-common-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.9-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.9-1.el7.x86_64.rpm
注意:是依次执行,不要乱了顺序,因为它们之间有依赖关系。看下面4张图:
- 这样我们就把MySQL安装好了,当然最重点的地方也就来了,那就是初始化。来吧,又到了官方文档时间段了,看下图,图中英文翻译过来就是:
在Unix和Unix系列系统中,有一点是很重要的,那就是确保数据库目录与文件的所有者为mysql登录账户,以便在你运行mysqld服务的时候,mysql服务可以对这些目录和文件进行读取与写入操作。如果你是以root身份运行mysqld服务,就需要确认一下,执行如下面显示的包含有--user选项的命令:
shell> bin/mysqld --initialize --user=mysql
shell> bin/mysqld --initialize-insecure --user=mysql
另外,当你是以mysql的账户登录并执行程序的情况下,你可以将--user选项从命令中去掉。
所以我在前面提到过添加mysql用户和mysql用户组,当然这步操作可做可不做。通过官方文档我们可以知道,如果我是root身份登录Linux系统,可以执行:mysqld --initialize --user=mysql或者mysqld --initialize-insecure --user=mysql。如果我是以mysql用户登录Linux系统,可以执行:mysqld --initialize或者mysqld --initialize-insecure。
- 再来看官方文档,看下图,图中英文翻译过来就是:
不管在哪个平台上,使用--initialize选项就是以“默认安全模式”来进行安装的(即包含一个随机的root初始密码的生成)。在这种情况下,密码是被标志为过期的,你需要选择一个新的密码。使用--initialize-insecure选项,没有root密码生成;如果是这样的话,在服务器投入生产使用之前,你需要及时地为账户指定密码。
通过官方文档我们可以知道,使用--initialize会为root账户生成一个随机的初始密码,我们可以使用命令:mysql -u root -p,然后输入密码来登录MySQL。使用--initialize-insecure不会为root账户生成一个随机的初始密码,我们可以使用命令:mysql -u root --skip-password直接登录MySQL。
- 初始化的操作我们要在/usr/bin目录中进行,所以我们先进入/usr/bin目录:
cd /usr/bin。
然后,我是以root身份登录Linux系统的,并且我想为root账户生成一个随机的初始密码,所以我要执行命令:
mysqld --initialize --user=mysql
这样就完成了对MySQL的初始化,并为root账户生成了一个随机的初始密码。
- 我们来对上一步来作个补充,因为你有可能会用到,还是来看官方文档,看下图,图中英文翻译过来就是:
mysqld服务会检查数据目录是否存在,如下:
如果数据目录不存在,mysqld则会创建它。
如果数据目录存在,且不是空目录(即包含有文件或子目录),mysqld会显示一条错误信息并中止:
[ERROR] --initialize specified but the data directory exists. Aborting.
遇到这种情况,就将数据目录删除或重命名后,重新再试一次。
我来简单说明一下,也就是在初始化之前,先检查一下数据目录是否存在,执行命令:ls -l /var/lib|grep mysql。若有,则执行命令:
rm -rf /var/lib/mysql,将其删除;
或者执行命令:mv /var/lib/mysql /var/lib/newname,将其重命名为newname,就可以了。
- 下面我们来看下root账户的随机初始密码,执行命令:
vi /var/log/mysqld.log
下图红线框中的字符就是密码,把它记下来,登录MySQL的时候要用:
- 现在可以启动mysqld服务了,执行命令:
systemctl start mysqld
我们来看下mysqld是否已经启动了,执行命令:
systemctl status mysqld
如果看到的和下图一样,就说明已经启动了:
- 我们来对上一步作个补充,因为你也有可能会遇到。如果你在执行命令:
systemctl start mysqld时,出现了和下图一样的提示:
Job for mysqld.service failed. See 'systemctl status mysqld.service' and 'journalctl -xn' for details.
出现这样的错误提示,我们先查看一下/var/lib/mysql-files目录是否存在,执行命令:ls -ld /var/lib/mysql-files。如果不显示任何信息就表示不存在,执行命令:mkdir /var/lib/mysql-files,创建/var/lib/mysql-files目录。这时,我们试着执行命令:systemctl start mysqld。如果还出现和下图一样的提示,我们执行另一条命令:chown -R mysql:mysql /var/lib/mysql,将/var/lib/mysql目录及其下所有文件和子目录的所有者和所属组都改为mysql。我们再执行一下:systemctl start mysqld应该就可以启动mysqld服务了。
- 准备工作全部就绪,来吧,登录吧!执行命令:mysql -u root -p。要注意输入密码是不显示的,不是你的键盘有问题,而是Linux的一种安全机制,只管输入就行。看下图:
- 最后还要讲下怎么修改密码,从官方文档中我们了解到要用ALTER USER语句可以修改密码。登录MySQL后,执行语句:
alter user 'root'@'localhost' identified by 'mYsqL$%123';
就将root账户的密码修改为mYsqL$%123了。
有一点需要注意,MySQL对用户密码安全性有所加强,所以设置的密码必须包含有数字,大写字母,小写字母,特殊符号,如果你设置的密码过于简单,会提示:
ERROR 1819 (HY000): Your password does NOT satisfy the CURRENT policy requirements。
至此,所有工作就完了。最后不禁要感慨一下:真后悔当初没好好学英语啊!好好学英语吧,童鞋们!