主从

93 阅读4分钟
mysql主从复制,一主一从主机配置

修改数据库配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf, 注意:这个文件根据安装mysql方式不同路径不同,需要找到自己mysql的配置文件 在[mysqld]节点中配置如下:

1.png

配置说明:
  1. server-id:指定master服务id,必须
  2. log-bin=mysql-bin:需要打开日志文件,必须,这里有些人会指定一个目录,但是笔者指定一个目录之后发现mysql就启动不起来了,这里直接设置为 mysql-bin 就可以,生成的文件过后是可以使用命令查看的
  3. 错误日志文件归集路径,可选
  4. read-only=0 数据库读写模式 因为主机一般都是可读可写的,也可以使用默认值这项可选, 0为可读可写,1为只读
  5. binlog_do_db :这项可选所以没有配置,意思 要复制哪些数据库
  6. binlog_ignore_db 这项可选所以没有配置,意思 忽略复制哪些数据库

这里就完成了主机数据库配置文件的修改,保存之后重启mysql服务。

mysql主从复制,一主一从从机配置

从机数据库配置相对简单点,也是修改数据库配置文件(如上路径),只需要在【mysqld】节点中配置server-id即可:

2.png !!!server-id不能和主机重复了,read-only这里理论上从机只做读操作,所以设置为1,但是这里有坑下文再说

从机的配置配置一个server-id就可以了保存退出,重启服务,这里我们就配置好了一台主机和从机 主机:192.168.192.133 从机:192.168.192.132

查看log-bin文件的生成位置
  1. 首先登录到数据库中 mysql -u root -p 根据提示输入密码
  2. 输入命令:show variables like '%log_bin%';

3.png

在图中我们可以看到log_bin 的value是ON说明是打开了二进制文件配置,log_bin_basenaem 的value 就是文件的保存地址,去到目录查看

4.png

!!!这里的mysql-bin.000001就是生成的二进制文件了

从机的配置配置一个server-id就可以了保存退出,重启服务,这里我们就配置好了一台主机和从机 主机:192.168.192.133 从机:192.168.192.132

查看log-bin文件的生成位置
  1. 首先登录到数据库中 mysql -u root -p 根据提示输入密码
  2. 输入命令:show variables like '%log_bin%';

3.png

在图中我们可以看到log_bin 的value是ON说明是打开了二进制文件配置,log_bin_basenaem 的value 就是文件的保存地址,去到目录查看

4.png

!!!这里的mysql-bin.000001就是生成的二进制文件了

主机给从机链接授权
  1. mysql -u root -p 根据提示输入密码
  2. 使用命令:
grant REPLICATION SLAVE ON *.* to 'ayou'@'192.168.192.132' identified by '123456';
  1. 命令解析
  • grant: 是数据库的授权命令
  • ayou:被授权的账号
  • REPLICATION SLAVE:复制权限
  • '192.168.192.132':被授权登录的从机ip
  • '123456':被授权账号的密码

执行命令后,再执行刷新权限表命令:

FLUSH PRIVILEGES;

查看某个账号被分配权限的命令:如

show grants for  'ayou'@'192.168.192.132'

5.png

使用命令查看master状态
show master status;

6.png

  • file:二进制文件,从机要复制主机的哪一个二进制文件
  • position:磁道,就是从机要从哪一个节点开始复制主机的内容
  • binlog_Do_DB:要复制的哪一个数据库(这一项可在上文配置文件配置)
  • Binlog_Igore_DB:要排斥复制的哪个数据库,(这一项可在上文配置文件配置)
从机连接主机配置

在上文中在主机中为从机账号授权了,现在要通过这个账号来连接主机,步骤如下:

  1. 登录数据库mysql -u root -p
  2. 登录成功后输入命令:
change master to master_host='192.168.192.133',master_user='ayou',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=10756;

命令详解:

  • master_host:主机ip地址
  • master_user:master授权账号
  • master_password:master授权的密码
  • master_log_file:对应的二进制文件,如上图所示的FIle
  • master_log_pos=:对应的是master上的磁道(通俗将就是你要从二进制文件的哪个地方开始做复制)
  1. 输入成功后执行如下命令启动slave,:
start slave;
  1. 执行如下命令查看slave状态:
show slave status\G;

7.png

  • slave_Io_State:状态必须显示为 Waiting for master to send event
  • Slave_IO_Running:YES 状态必须显示为 YES
  • Slave_SQL_Running:YES 状态必须显示为 YES

!!!以上三项条件必须满足才证明主从之间的通道打开