前言
MySQL作为当前最流行的开源关系型数据库管理系统之一,在企业级应用中扮演着重要角色。随着数据量的不断增长和数据安全性的需求提升,数据库的高可用性和数据冗余备份变得尤为重要。主从复制(Master-Slave Replication)技术正是实现这一目标的有效解决方案,它不仅能提高数据库系统的可用性,还能实现读写分离,有效分担数据库负载。
本文将以CentOS 7操作系统为平台,详细介绍MySQL数据库的安装与配置过程,并重点阐述如何搭建MySQL主从复制环境。通过分步骤的指导,读者将学习到从基础安装到复杂配置的全过程,包括MySQL服务器的初始化设置、主从服务器的参数配置等关键环节。
我的公众号(附有面试资料):Java乐享
一.MySQL的下载
下载完成后执行如下操作
#安装lrzsz
yum install lrzsz
cd /usr/local
rz 空格(选择下载的压缩包) #上传
tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz #解压
mv mysql-5.7.26-linux-glibc2.12-x86_64/ mysql #重命名
创建mysql用户组和用户并修改权限
groupadd mysql
useradd -r -g mysql mysql
创建数据目录并赋予权限
mkdir -p /data/mysql #创建目录
chown mysql:mysql -R /data/mysql #赋予权限
配置my.cnf
vim /etc/my.cnf
如下内容
[mysqld]
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
#character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true
# log-error=/var/log/mariadb/mariadb.log
# pid-file=/var/run/mariadb/mariadb.pid
注意:需要将[mysqld_safe]下面的两句注释了,否则后面的初始化数据会报错
二.初始化数据库
进入mysql的bin目录
cd /usr/local/mysql/bin/
初始化
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/data/mysql/ --user=mysql --initialize
如果出现如下错误
./mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
需要如下操作后在执行初始化
yum -y install numactl
查看密码
cat /data/mysql/mysql.err
把密码记录下来NFVn%5bfBf+w,后面登录会用到
三.启动mysql,并更改root 密码
先将mysql.server放置到/etc/init.d/mysql中
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
启动,如下即启动成功
service mysql start
修改密码
./mysql -u root -p #bin目录下
将刚才记录下来的密码复制进去,在如下操作
set password = password('root');
flush privileges;
这时候你如果使用远程连接……你会发现你无法连接
执行下面的命令
use mysql #访问mysql库
update user set host = '%' where user = 'root'; #使root能再任何host访问
FLUSH PRIVILEGES; #刷新
注意:如果你用的是腾讯云或者阿里云需要配置安全组规则
并且在腾讯云界面添加安全组规则(点击更多操作->加入安全组->点击安全组id即可设置)
再次连接即成功
四.主从同步
1)编辑mysql配置文件
vi /etc/my.cnf
2)添加二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)
server-id=1 #id是一定要指定的,是唯一的标识(master数据库要比slave数据库的id优先级高才行)
log-bin=master-bin #开启二进制日志
3)授权
登录数据库
需要给slave数据库配置一个用户/密码的权限
mysql> grant replication slave on *.* to 'root'@'slave数据库ip' identified by '密码';
允许某个ip地址的某个用户以某个密码对当前数据库的所有库和表进行复制操作
配置之后需要刷新权限
mysql> flush privileges;
上面修改配置文件需重启服务
service mysql restart
4)查看master的状态
登录数据库
mysql> show master status;
file:是日志文件名称
position:日志所在位置
五.开启slave的二进制日志
登录slave服务器
1)配置my.cnf配置文件
vi /etc/my.cnf
2)添加slave二进制日志配置,开启二进制(mysql-bin只是二进制日志名称,可以自行指定)
server-id=2
log-bin=mysql-bin
注意:每一台指定唯一的一个server-id标识
修改完配置服务需重启服务
[root@VM_0_16_centos ~]# service mysql restart
3)配置slave指向master
登录数据库
mysql> change master to
-> master_host='master数据库ip',
-> master_user='master授权账号',
-> master_password='授权密码',
-> master_log_file='master日志文件(mysql-bin.000002)',
-> master_log_pos=master日志所在位置(154);
master的日志文件名称可以在master数据库使用show master status;查看到
六.开启主从复制
在slave服务器上执行
mysql> start slave;
查看slave运行状态
mysql> show slave status\G;
能查看到这两个为yes则成功,上图错误Slave_IO_Running: No表示slave的日志读取线程开启失败
解决方案:
stop slave;
reset slave;
start slave;
再次查看两个都为yes
测试在主数据库新建test数据库后刷新从数据库可看到创建的test的数据库在从数据库显示。