MYSQL主从模式搭建

mysql 主从模式搭建

主从模式的优点有如下几点:

  1. 主库出现问题,可以快速切换到从库提供服务。
  2. 可以在从库上执行查询操作,从主库中更新。
  3. 实现读写分离可以在从库中执行备份,以避免备份期间影响主库的服务。
下载资源包

centos7 x64

mysql 5.7.20(压缩版)

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

这边整理一下几个目录:

在 /usr/local/ 目录下创建mysql文件夹,便于管理。

下载文件,改名复制两份。

添加用户组mysql:

groupadd mysql 

添加用户mysql且该用户不能登陆:

useradd -g mysql mysql -s /bin/false 
  • bin 目录存放批量启动 三个数据库
  • conf 数据库配置
  • data 指向数据文件
  • sock 指向登录sock配置文件
  • logs存放日志

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-06o38R2L-1599814779135)()]

  1. 进入conf目录,新建3306.cnf,3307.cnf,3308.cnf,如图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g0NxMAYM-1599814779137)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

2.进入logs目录,新建3306_err.log,3307_err.log,3308_err.log,

3.现在开始搞配置文件,这里我们拟定3306为主库(master),3307,3308为从库(slave),

首先配置master,即conf目录下的3306.cnf,如图(这里只配置了mysqld组和mysqld_safe,没有配置client),

[mysqld]
user=mysql #mysql启动用户
skip-grant-tables
character-set-server=utf8 #服务字符集
port=3306 #端口
socket=/usr/local/mysql/sock/3306.sock #用于通讯的套接字,由于是一台机多实例,所以区分开
basedir=/usr/local/mysql/mysql3306 #mysql安装目录
datadir=/usr/local/mysql/data/3306 #数据存放目录
server-id=1 #本机唯一标识
log-bin=master-bin #bin-log前缀
log-bin-index=master-bin.index #bin-log-index前缀
binlog_format=ROW #binlog格式 (STATEMENT,ROW,FIXED),这里主要为了后续要测试canal,所以用到了ROW,具体格
式区别,自行搜索
binlog-ignore-db=mysql #不需要同步给从库的库
binlog-ignore-db=sys #不需要同步给从库的库
binlog-ignore-db=information_schema #不需要同步给从库的库
binlog-ignore-db=performance_schema #不需要同步给从库的库

[mysqld_safe]
log-error=/usr/local/mysql/logs/3306_err.log #启动错误日志输出地址

在主节点执行 配置完成后,进入mysql安装目录(basedir指向路径)初始化实例
./bin/mysqld --defaults-file=/usr/local/mysql/conf/3306.conf --initialize-insecure

其中-insecure作用是不设置密码,如果不带则mysql会随机生成一个密码出现在控制台,需要记下来

6989d508-f26b-11ea-98d4-000c29173b83[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xv0FDzwJ-1599814779139)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

初始化不报错则启动mysql服务,运行mysqld或mysqld_safe命令启动mysql: 没报错启动

./bin/mysqld --defaults-file=/usr/local/mysql/conf/3306.conf &

假如出现这个错误:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zXTq33Po-1599814779142)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

这种错误一般都是目录不存在或者权限不足,所以我们直接使用命令 ,然后可以设置目录权限 chown -R mysql:mysql /usr/local/mysql/

启动不报错后为mysql root用户设置一个密码:

./bin/mysqladmin -u root password "123456" --socket=/usr/local/mysql/sock/3306.sock

(注意后面的 --socket参数必须带上,与配置文件中的socket配置值一致)

进入bin目录。登录

./mysql  -uroot -S /usr/local/mysql/sock/3306.sock -p

然后登陆mysql,执行如下命令:

登陆后查看master状态,如图:

show master status;

img

新建一个复制帐户,用于从库复制binlog使用:

create user 'slavedb'@'%' identified by '123456';

GRANT REPLICATION SLAVE ON *.* TO 'slavedb'@'%' identified by '123456';

flush privileges;


 drop user 'slavedb'@'%';

每个人的file和position可能不一样,请务必记录下来 后面的slave设置 position=4

master主库就ok了,现在开始配置slave从库,这里以3307.cnf为例子,3308.cnf仅需把3307.cnf内容中所有的3307替换成3308即,service-id 改下,如图:

[mysqld]
user=mysql
character-set-server=utf8
port=3307
socket=/usr/local/mysql/sock/3307.sock
basedir=/usr/local/mysql/mysql3307
datadir=/usr/local/mysql/data/3307
server-id=2 #server_id 每个实例不一样
read_only=1 #只读库
[mysqld_safe]
log-error=/usr/local/mysql/logs/3307_err.log

3307 和3308 配置好后

修改auto.conf
[auto]
server-uuid=5a82e87b-f26e-11ea-915b-000c29173b85

配置完成后,重复初始化,启动,设置密码步骤(注意指向所属的配置文件和socket)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zjbxsf6C-1599814779145)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

创建用户和3306 一样的
create user 'slavedb'@'%' identified by '123456';

GRANT REPLICATION SLAVE ON *.* TO 'slavedb'@'%' identified by '123456';

flush privileges;

stop slave; #停止slave

#SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
#3307 注意 master_log_file 是指向3306
change master to master_host='127.0.0.1',master_port=3306,master_user='slavedb',master_password='123456',master_log_file='master-bin.000007',master_log_pos=4; 
#3308 注意 master_log_file 是指向3306
change master to master_host='127.0.0.1',master_port=3306,master_user='slavedb',master_password='123456',master_log_file='master-bin.000007',master_log_pos=4; 

// 指向主库设置,其中最后两个参数为master中查询出来的值

#启动slave

start slave; 

查看状态

 show slave status\G;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0wbODkTj-1599814779147)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

  • 3306 查看
show processlist;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iDhsBZgO-1599814779147)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

这样就差不多装好了,可以自己在配置文件制定repel-host:

然后主库新建一个数据库,看看从库的效果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PQU0vhLV-1599814779148)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images)]

说明已经装好了:一般主库只做写的操作,从库1 读,从库2 备份数据

下面是常用的密令
show variables likes '%%'

find / -name auto.cnf

后台启动:./mysqld --defaults-file=/usr/local/mysql/conf/3306.conf --console --skip-grant-tables

socket链接:./mysql  -uroot -S /usr/local/mysql/sock/3306.sock -p

use mysql;

update user set authentication_string=password('123456') where user='root';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by '123456';

select user,host,authentication_string  from user;

l/mysql/sock/3306.sock -p

use mysql;

update user set authentication_string=password('123456') where user='root';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' identified by '123456';

select user,host,authentication_string  from user;

参考:https://www.cnblogs.com/hankguo/p/8204868.html

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值