centos7搭建mysql主从

1.Linux安装mysql方法

linux安装mysql有多种方式:

  • 像直接解压缩tar包,然后配置my.cnf(window中的mysql配置文件是my.ini)并使用命令启动mysql
  • 像centos7自带mariadb(这个可以与mysql库对照使用,功能几乎一样)数据库
  • 也可以使用rpm安装
  • 也可以使用docker安装等。本文使用rpm安装方式。

2.Centos7通过rpm方式安装mysql(5.7.36)

1.centos7排除mariadb(以防与mysql冲突)

Centos7可能默认有 mariadb,可能与mysql安装有冲突,使用rpm -qa | grep mariadb看mariadb是否存在
若存在:

  • 使用rpm -e --nodeps mariadb-*全部删除:
  • 使用yum remove mysql mysql-server mysql-libs compat-mysql51全部删除;
    俩条命令同时执行一下

mysql安装包版本:

image.png

2.以下操作在mysql主从服务器同步操作

这里我首先在主服务器上执行了一遍,故以下图片展示仅为从服务器执行操作

  • 1.在/usr/local/下新建文件夹solf并将mysql安装包上传
  • 2.cd /usr/local/solf,此时路径和包如图


    image.png
  • 3.执行tar –xvf mysql-5.7.36-1.el7.x86_64.rpm-bundle.tar,解压如下所示


    image.png
  • 4.rpm安装顺序

rpm -ivh mysql-community-common-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-devel-5.7.36-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.36-1.el7.x86_64.rpm

注:安装mysql-community-server-5.7.36-1.el7.x86_64.rpm
若出现以下错误(这里我没有按顺序安装,是直接安装service出现的问题):

image.png

分别使用yum安装相关(若遇到询问全选y,要不就直接回车)

yum install libaio
yum install perl
yum -y install net-tools

安装成功后会创建mysql组、mysql用户。数据库目录的属组为mysql:mysql。使用find / -name mysql查看相关信息如下:


image.png
  • 5.查看mysql状态service mysqld status,结果如下:

    image.png

    这个代表mysql未启动,使用service mysqld start启动mysql。
    Mysql安装以后就是开机启动,故不需要设置了。

  • 6.此时mysql已经安装成功,需要配置一下密码并授权远程登陆

使用vi /etc/my.cnf,打开mysql配置添加skip-grant-tables配置(跳过密码检查)


image.png

现在登录mysql不需要密码登录,使用mysql –uroot –p直接登录
修改root密码(方法很多):
update mysql.user set authentication_string=password('123456') where user='root';
执行flush privileges;(即刻生效)
退出,编辑vi /etc/my.cnf,删除或者注释掉skip-grant-tables
最后使用systemctl restart mysqld.service命令重启mysql服务。
再次登录mysql,可能会有这俩个错误:

image.png

image.png

一个是必须重置密码才能操作,一个是密码设的太简单也会报错
解决办法:
输入命令set global validate_password_policy=0;这行命令的意思是mysql开启简单密码校验
set global validate_password_length=4;这行命令意思是校验长度为4位
然后使用alter user 'root'@'localhost' identified by '123456';重新设置密码
授权远程登录:
grant all privileges on *.* to 'root'@'%' identified by '123456';
执行flush privileges;
其中%代表允许所有主机远程登录,若只想允许某台主机远程登录,将%换为远程主机地址就可以
至此centos7安装mysql成功。

3.mysql主从搭建

  • 1.配置主机ip及名字
    首先在俩台服务器上打开vi /etc/hosts文件,文件最底下加入mysql主从服务器ip配置。
    主机ip地址 主机名称
    例:172.30.11.12(你自己的服务器地址) master
    172.30.11.13 slave

    1. 两台主机都关闭防火墙和SELinux服务
      关闭防火墙命令如下:
      systemctl stop firewalld; //关闭防火墙
      systemctl disable firewalld; //将防火墙设置开机不自启
      关闭selinux服务:
      vi /etc/selinux/config //进入到此目录下将selinux的状态设置为disabled
      image.png

      再使用 set enforce 0 命令将selinux的修改生效
  • 3.主从配置

1.mysql主服务器配置(master节点)

修改my.cnf配置文件,vi /etc/my.cnf,在[mysqld]下任意位置加

#保持唯一,我是根据主机地址最后一位命名的
server-id=14
#开启binlog,指定binlog的文件前缀
log-bin=mysql-bin

修改结果如下:

image.png

退出,重启mysql服务,systemctl restart mysqld.service
登录进mysql,检查binlog是否开启,on为开启,命令show variables like '%log_bin%';如图所示:
image.png

在主节点master数据库上创建一个mysqlsync用户让从节点slave连接,并赋予从节点同步主节点数据库的权限,
grant replication slave on *.* to 'mysqlsync'@'slave节点ip' identified by '123456';
检查主节点状态:show master status;
image.png

2.配置从节点(slave)

测试slave连接master数据库:
mysql –h 主节点ip或者hosts中配置的名字 –u 用户名 –p密码 –P端口
例:mysql -h mysqlmaster -u mysqlsync -pmysqlsync -P 3306
注意:-p和密码直接不能有空格

修改my.cnf配置文件,内容如下:

[mysqld]
#保证该id唯一
server-id=15
#中继日志
relay_log=relay-log
#设置只读,开启读写分离
read_only=ON

展示如下:

image.png

重启mysql服务,systemctl restart mysqld.service
并绑定master节点:change master to master_host='192.168.56.14',master_user='mysqlsync',master_password='mysqlsync';
开启从节点服务。使用命令show slave status\G;并查看从节点服务状态,如果Slave_IO_RunningSlave_SQL_Running的状态都为YES,则从节点服务开启成功。查询结果如图所示。
使用命令开启start slave;
查看show slave status\G;
image.png

  • 4.测试,在master新建数据库test,导入或者新建表,刷新slave数据库,数据库及表都同步过去了

4.保证从库可以同步主库数据,且存库是只读的

在slave库中需要设置set global read_only=1;并将root设置为只能本地连接,新创建slave用户去同步主库。
Slave用户只授予所有库的查询权限:
show grants;展示当前用户的所有权限
show grants for 'username'@'host'; 查看某个用户的所有权限
grant select on *.* to 'subslave'@'%'; 授予subslave用户所有库和表的查询权限
grant all priveleges on mysql.* to ‘subslave’@’%’授予subslave用户mysql库中所有表的操作权限。
Revoke all privileges on databasename.tablename from 'username'@'host'; 回收权限。
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');设置密码

5.主从的一些命令使用:

1.主:

show master status; 查看主库状态信息
reset master; 清除binlog日志信息
PURGE { BINARY | MASTER } LOGS { TO 'log_name' | BEFORE datetime_expr }用于删除列于在指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除,这样被给定的日志成为第一个
PURGE BINARY LOGS TO 'mysql-bin.000002';删除mysql-bin.000002之前的日志(不包括mysql-bin.000002)
PURGE BINARY LOGS BEFORE '2017-12-15 11:53:59';删除2017-12-15 11:53:59时间点之前的日志

2.从:

start slave;    开启从库
show slave status\G;    查询slave状态信息,可以观察binlog文件,relaylog文件,io是否正常等信息
stop slave; 停止从库
reset slave;    relay log日志清除

问题:
若见到以下俩个有一个为no


image.png

可采用如下解决方式:(一般情况下方式1就可解决)

  • 解决方式1
    1.程序可能在slave上进行了写操作
    2.也可能是slave机器重起后,事务回滚造成的.
    一般是事务回滚造成的:
    stop slave;
    set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    start slave;
  • 解决方式2
    首先停掉Slave服务:slave stop,再到主服务器上查看主机状态:记录File和Position对应的值。
    进入master,show master status;就可以看到值
    然后到slave服务器上执行手动同步:
change master to
  master_host='master_ip',
  master_user='user',
  master_password='pwd',
  master_port=3306,
  master_log_file='bin.000130',  // 配置bin_log日志
  master_log_pos=33622483 ;  // 配置bin_log日志的位置

可能会报错:log_file 不存在,这是需要查看从数据库服务器中mysql的 log文件目录下,master_log_file 是否存在? 不存在时,直接从主数据服务器中复制过来即可。

6.总结

刚开始学习mysql主从搭建以为特别难,故自己搭建虚拟机安装mysql并配置主从,但是发现配置主从不是特别麻烦。这里建议使用docker搭建mysql主从,应该会方便不少,如果学习的,可以走一遍安装配置流程。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容