mysql主从复制,一主一从主机配置
修改数据库配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf, 注意:这个文件根据安装mysql方式不同路径不同,需要找到自己mysql的配置文件 在[mysqld]节点中配置如下:
配置说明:
- server-id:指定master服务id,必须
- log-bin=mysql-bin:需要打开日志文件,必须,这里有些人会指定一个目录,但是笔者指定一个目录之后发现mysql就启动不起来了,这里直接设置为 mysql-bin 就可以,生成的文件过后是可以使用命令查看的
- 错误日志文件归集路径,可选
- read-only=0 数据库读写模式 因为主机一般都是可读可写的,也可以使用默认值这项可选, 0为可读可写,1为只读
- binlog_do_db :这项可选所以没有配置,意思 要复制哪些数据库
- binlog_ignore_db 这项可选所以没有配置,意思 忽略复制哪些数据库
这里就完成了主机数据库配置文件的修改,保存之后重启mysql服务。
mysql主从复制,一主一从从机配置
从机数据库配置相对简单点,也是修改数据库配置文件(如上路径),只需要在【mysqld】节点中配置server-id即可:
!!!server-id不能和主机重复了,read-only这里理论上从机只做读操作,所以设置为1,但是这里有坑下文再说
从机的配置配置一个server-id就可以了保存退出,重启服务,这里我们就配置好了一台主机和从机 主机:192.168.192.133 从机:192.168.192.132
查看log-bin文件的生成位置
- 首先登录到数据库中 mysql -u root -p 根据提示输入密码
- 输入命令:show variables like '%log_bin%';
在图中我们可以看到log_bin 的value是ON说明是打开了二进制文件配置,log_bin_basenaem 的value 就是文件的保存地址,去到目录查看
!!!这里的mysql-bin.000001就是生成的二进制文件了
从机的配置配置一个server-id就可以了保存退出,重启服务,这里我们就配置好了一台主机和从机 主机:192.168.192.133 从机:192.168.192.132
查看log-bin文件的生成位置
- 首先登录到数据库中 mysql -u root -p 根据提示输入密码
- 输入命令:show variables like '%log_bin%';
在图中我们可以看到log_bin 的value是ON说明是打开了二进制文件配置,log_bin_basenaem 的value 就是文件的保存地址,去到目录查看
!!!这里的mysql-bin.000001就是生成的二进制文件了
主机给从机链接授权
- mysql -u root -p 根据提示输入密码
- 使用命令:
grant REPLICATION SLAVE ON *.* to 'ayou'@'192.168.192.132' identified by '123456';
- 命令解析
- grant: 是数据库的授权命令
- ayou:被授权的账号
- REPLICATION SLAVE:复制权限
- '192.168.192.132':被授权登录的从机ip
- '123456':被授权账号的密码
执行命令后,再执行刷新权限表命令:
FLUSH PRIVILEGES;
查看某个账号被分配权限的命令:如
show grants for 'ayou'@'192.168.192.132'
使用命令查看master状态
show master status;
- file:二进制文件,从机要复制主机的哪一个二进制文件
- position:磁道,就是从机要从哪一个节点开始复制主机的内容
- binlog_Do_DB:要复制的哪一个数据库(这一项可在上文配置文件配置)
- Binlog_Igore_DB:要排斥复制的哪个数据库,(这一项可在上文配置文件配置)
从机连接主机配置
在上文中在主机中为从机账号授权了,现在要通过这个账号来连接主机,步骤如下:
- 登录数据库mysql -u root -p
- 登录成功后输入命令:
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上的磁道(通俗将就是你要从二进制文件的哪个地方开始做复制)
- 输入成功后执行如下命令启动slave,:
start slave;
- 执行如下命令查看slave状态:
show slave status\G;
- slave_Io_State:状态必须显示为 Waiting for master to send event
- Slave_IO_Running:YES 状态必须显示为 YES
- Slave_SQL_Running:YES 状态必须显示为 YES
!!!以上三项条件必须满足才证明主从之间的通道打开