CentOS7安装mysql-5.7.44单机和主从复制

官网下载地址:

https://downloads.mysql.com/archives/community/

1、单机安装

安装依赖

bash 复制代码
yum -y install libaio

解压安装

bash 复制代码
tar -zxvf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz

mv mysql-5.7.44-linux-glibc2.12-x86_64 /usr/local/mysql

cd /usr/local/mysql

创建一个mysql组和用户

bash 复制代码
groupadd mysql
useradd -r -g mysql mysql

更改mysql 目录所属的用户组、用户以及文件权限

bash 复制代码
#切换到刚刚下载的mysql文件夹对应的目录下
cd /usr/local
#更改文件的用户组和用户
chown -R mysql:mysql mysql
#给mysql目录下的所有文件加执行权限
chmod -R 775 mysql

把mysql/bin目录加入到系统环境变量中

bash 复制代码
#把这个写到配置文件里,路径不同,记得要修改路径
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
#生效配置文件
source /etc/profile
# 检查环境变量是否配置成功
mysql --version

如果出现版本号,则表示MySQL环境变量配置成功了。

生成临时密码,记住这个密码,后面要使用。

bash 复制代码
#切换到mysql目录下
cd /usr/local/mysql
 
# 生成临时数据库密码
mysqld --user=mysql --initialize --datadir=/usr/local/mysql/data

注意:这里的临时密码需要记住 w,bnuSs<t1tV

复制启动文件到/etc/init.d目录

bash 复制代码
# 在mysql目录下复制启动文件到/etc/init.d/目录
cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

配置my.cnf

vi /etc/my.cnf

bash 复制代码
[mysqld]
# 指定Mysql数据库的开放端口。
port = 3306
# 设置Mysql数据库的安装目录(绝对路径)。
basedir = /usr/local/mysql
# 设置Mysql数据库的数据存放的绝对路径(存放目录)。必须是data,或者是\\xxx-data(my.ini需要,my.cnf不需要)。
datadir = /usr/local/mysql/data
# 设置MySQL数据库的最大连接数量。
max_connections = 100
# 设置MySQL数据库的连接超时时间。默认设置是一个数据库连接超过8小时没有使用,达到了server端的timeout,服务器将断开这条连接。
wait_timeout = 28800
# 当没有数据库请求时,28800秒(即8小时)将自动断开连接。要同时设置interactive_timeout和wait_timeout才会生效。
interactive_timeout = 28800

socket=/var/lib/mysql/mysql.sock
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
socket=/var/lib/mysql/mysql.sock

!includedir /etc/my.cnf.d

保存后,给配置文件加上可执行权限

bash 复制代码
chmod -R 775 /etc/my.cnf
bash 复制代码
#日志目录
mkdir /var/log/mariadb/
touch /var/log/mariadb/mariadb.log
chown -R  mysql:mysql /var/log/mariadb/


mkdir /var/lib/mysql/
chown -R  mysql:mysql  /var/lib/mysql/

启动服务,启动之前我们先查询有没有启动过,没有启动查询结果为空

bash 复制代码
ps -ef|grep -v grep |grep mysql
ps -ef|grep -v grep |grep mysqld

启动

bash 复制代码
#启动mysql服务
/etc/init.d/mysqld start

#启动成功标志
Starting MySQL. SUCCESS!

登录并修改root密码

bash 复制代码
# mysql -u用户名 -p密码
mysql -uroot -p"w,bnuSs<t1tV"

登录mysql ,密码就是初始化时生成的临时密码;

登录进来之后,我们来修改密码

bash 复制代码
#修改密码为root
set password for root@localhost = password('root');

quit 退出后,重新登录一下

bash 复制代码
mysql -uroot -proot

开放远程登陆

bash 复制代码
#登录进来之后,切换到mysql库
use mysql;
#修改用户权限
update user set user.Host='%' where user.User='root';
#刷新权限
flush privileges;

开启防火墙

bash 复制代码
#开启端口
firewall-cmd --permanent --add-port=3306/tcp
#重新加载防火墙
firewall-cmd --reload

2、主从复制

按照上面的方式,安装两台单机版本。

二进制日志文件

修改数据节点的唯一标识

在 [mysqld] 下新增2行,其中server-id用来区分节点的编号,唯一。log-bin设置二进制文件的名称。

vi /etc/my.cnf

bash 复制代码
[mysqld]
server-id=1
log-bin=mysql-bin

另外一台

bash 复制代码
[mysqld]
server-id=2
log-bin=mysql-bin

重启数据库 让二进制文件生效即可

bash 复制代码
/etc/init.d/mysqld restart

重启后生成二进制文件

bash 复制代码
ll /usr/local/mysql/data/mysql-bin*

-rw-r----- 1 mysql mysql 154 3月  21 16:37 /usr/local/mysql/data/mysql-bin.000001
-rw-r----- 1 mysql mysql  19 3月  21 16:37 /usr/local/mysql/data/mysql-bin.index

实现主从挂载

主库状态

主库IP这里使用192.168.111.201

检查主库的状态,主要查询 要同步的 文件名 File 和 位置 Position

bash 复制代码
#在主库执行
# 在主库201查询状态
# 登录
mysql -uroot -proot

SHOW MASTER STATUS;

如下 Position 查询结果为 154 后面需要使用。

bash 复制代码
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      154 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

实现主从挂载

这一步在 从库 192.168.111.202 里面执行

bash 复制代码
# 在从库中执行
# 从库链接主库
# IP/端口/用户名/密码/二进制文件名/pos位置

# 登录
mysql -uroot -proot

#同步主库
CHANGE MASTER TO 
MASTER_HOST="192.168.111.201",#主库ip
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=154;

启动主从

启动主从服务,在从库执行下面命令

bash 复制代码
# 登录
mysql -uroot -proot

#启动
START SLAVE;

这一步在 从库里面执行,出现如下2个yes就成功了。

bash 复制代码
# 登录
mysql -uroot -proot

#检查主从状态
#SHOW SLAVE STATUS;


#检查主从状态,命令行客户端,垂直格式显示结果
SHOW SLAVE STATUS\G
sql 复制代码
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

测试主从

主从要达到的效果,修改主库的数据,从库的数据跟着改变。千万不要手动去改从库的数据,去看主库变化没有,千万不要这样操作,这样主从就废了。

主从不一致

主从报错 Slave_SQL_Running: No

重新做主从,完全同步

该方法适用于主从库数据相差较大,或者要求数据完全统一的情况

重新做主从,然后使用change master指定同步位置,这种耗时长

主库执行

bash 复制代码
mysql -uroot -proot

#1.先进入主库,进行锁表,防止数据写入 
mysql> flush tables with read lock; 
#注意:该处是锁定为只读状态
#2.进行数据备份,test表示要备份的数据库名称
mysqldump -uroot -proot --lock-all-tables --flush-logs test > /usr/local/mysql/data/back.sql


# 修改导出的sql语句
vi /usr/local/mysql/data/back.sql
# 创建数据库,test改成自己的数据库名称
CREATE DATABASE IF NOT EXISTS  `test` CHARSET utf8;
# 在执行SQL语句之前,使用USE 数据库名;test改成自己的数据库名称
use `test`;


# 复制到从库
scp /usr/local/mysql/data/back.sql root@192.168.111.202:/usr/local/mysql/data/
mysql> unlock tables;

#查看主机状态:File和Position对应的值
show master status;

从库执行

bash 复制代码
# 从库操作
mysql -uroot -proot

# 1.停止从库的状态
mysql> stop slave;
# 2.清除从节点配置信息(仅清理master.info 和 relay-log.info 文件)
mysql> reset slave;
# 3.从库执行mysql命令,导入数据备份
mysql> source /usr/local/mysql/data/back.sql

# 4.设置从库同步,master_log_pos改成主库Position最新的值

CHANGE MASTER TO 
MASTER_HOST="192.168.111.201",#主库ip
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=154;

# 5.启动同步
start slave ;

# 查看
SHOW SLAVE STATUS\G
相关推荐
小技与小术3 分钟前
数据库表设计范式
数据库·mysql
安迁岚5 分钟前
【SQL Server】华中农业大学空间数据库实验报告 实验三 数据操作
运维·服务器·数据库·sql·mysql
安迁岚7 分钟前
【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器
数据库·sql·mysql·oracle·实验报告
无敌岩雀44 分钟前
MySQL中的索引
数据库·mysql
东阳马生架构1 小时前
MySQL原理简介—1.SQL的执行流程
mysql
安迁岚2 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel2 小时前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
JH30732 小时前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
路有瑶台4 小时前
MySQL数据库学习(持续更新ing)
数据库·学习·mysql
lwprain5 小时前
常用docker应用部署,wordpress、mysql、tomcat、nginx、redis
mysql·docker·tomcat