mysql主从复制

  • 原理

mysql要做到主从复制,其实依靠的是二进制日志,即:假设主服务器叫A,从服务器叫B;主从复制就是

  B跟着A学,A做什么,B就做什么。那么B怎么同步A的动作呢?现在A有一个日志功能,把自己所做的增删改查的动作全都记录在日志中,B只需要拿到这份日志,照着日志上面的动作施加到自己身上就可以了。这样就实现了主从复制。

  • 配置
#别的别说,直接管防火墙咯
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
sudo setenforce 0

1.首先修改mysql的配置文件,使其支持二进制日志功能。

打开主服务器的mysql配置文件:my.cnf(linux)/my.ini(windows)

代码:# vi /etc/my.cnf

加入如下三行代码:

[mysqld]

log-bin=mysql-bin

server-id=239

binlog_checksum=none

参数解释:log-bin=mysql-bin  //将mysql二进制日志取名为mysql-bin

 binlog_checksum=none //设置为 none 表示禁用了二进制日志文件的校验和检查。

  server-id=239 //为服务器设置一个独一无二的id便于区分,建议使用ip地址的最后一位充当server-id

配置完成,:wq 保存,重启mysql

2.重启mysql命令:# service mysqld restart

3.同样的,进入从服务器,配置从服务器的my.cnf,重复步骤1即可,

[mysqld]

log-bin=mysql-bin

server-id=137

binlog_checksum=none

唯一的区别是,server-id要改成从服务器的ip尾位,即server-id=239;其他两项是一样的,保存,并重启mySQL;
4. 在主服务器上为从服务器分配一个账号,就像一把钥匙,从服务器拿着这个钥匙,才能到主服务器上来共享主服务器的日志文件。

进入主服务器的mysql命令行:

# mysql -u root -p root

# CREATE USER 'slave'@'%' IDENTIFIED BY 'abc123';

#grant REPLICATION SLAVE on *.* to 'slave'@'%';

# alter user 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123';

# flush privileges;

CREATE USER 'slave'@'%' IDENTIFIED BY 'abc123';

注:这条命令创建了一个名为 'slave' 的用户,并设置其可以从任何主机 '%' 登录,密码为 'abc123'。

SELECT user, host FROM mysql.user WHERE user = 'slave';可以查看到它是否成功

grant REPLICATION SLAVE on . to 'slave'@'%';

SHOW GRANTS FOR 'slave'@'%';查看此命令是否成功

这条命令授予了 'slave' 用户在所有数据库、所有表上进行复制操作的权限

ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'abc123';

这条命令修改了 'slave' 用户的身份验证方式为 mysql_native_password,并更新了密码为 'abc123'。

FLUSH PRIVILEGES;

这个命令用于刷新 MySQL 的权限缓存

5.查看主服务器BIN日志的信息(执行完之后记录下这两值,然后在配置完从服务器之前不要对主服务器进行任何操作,因为每次操作数据库时这两值会发生改变).

   #show master status;

6. 设置从服务器

进入从服务器mysql命令行: # mysql -u root –proot

关闭slave#stop slave;

设置访问master的配置:change master to master_host='192.168.175.239',master_user='slave',master_password='abc123', master_log_file='mysql-bin.000009',master_log_pos=12756;

参数解释: MASTER_HOST  :  设置要连接的主服务器的ip地址

  MASTER_USER  :  设置要连接的主服务器的用户名

  MASTER_PASSWORD  :  设置要连接的主服务器的密码

    MASTER_LOG_FILE  :  设置要连接的主服务器的bin日志的日志名称   

MASTER_LOG_POS  :  设置要连接的主服务器的bin日志的记录位置

7.先在从服务器配置完成,

启动从服务器slave :#start slave;

查看是否配置成功:#show slave status;

上面两项均为yes,说明配置成功,否则,请重复前面的步骤。即,重新启动主服务器,查看bin日志的名称和记录的位置;关闭从服务器slave,配置连接主服务器信息,启动slave,查看是否两项全都启动

注意:mysql replication中slave机器上有两个关键进程,死一个都不行,一个是slave_sql_running,一个是slave_io_running,一个负责与主机的IO通信,一个负责自己的slave mysql进程。

  • 验证
  1. 主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:

注:主服务器可以创建一个表,从服务器就会自动生成那张表,如果从服务器创建表的话,主服务器的是不会生成那张表。

 NO Slave_SQL_Running: NO 的解决办法

1.看MySQL 的错误日志文件 /var/log/mysql/error.log,MySQL 可能未在配置文件中指定日志文件路径,或者路径配置不正确。首先,sudo find /etc -name my.cnf,进行配置错误日志的目录[mysqld]
log_error = /var/log/mysql/error.log
如果没有找到该配置项或路径不正确,可以手动添加或修复配置项,并重启 MySQL 服务使其生效。如果不想配置错误日志就看下一个吧!!!!!!!

2.MySQL的uuid是唯一的,查看主从机器的uuid是否唯一。

查看文件:/var/lib/mysql/auto.cnf        注:如果找不到该文件find / -name auto.cnf 

查看结果:主从机器的uuid不一样,此可能性被排除。如果一样,就删除auto.cnf,再重启mysql它会重新生成一个

3确认server-id是否唯一。

查看文件:/etc/mysql/my.cnf

查看结果:主从机器的server-id唯一,此可能性被排除。

4:因为从库MySQL重启导致二进制文件位置从库和主库不一致。

1、查看:

主库:show master status\G

从库:show slave status\G

2、主库从库二进制文件是不一致的,开心,可能就是这个原因了。

3、根据网上方法修改:在从库中依次执行如下操作

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000004', MASTER_LOG_POS=154;
Query OK, 0 rows affected (0.00 sec)

mysql> start slave;
 4、再次查看从库信息:sad。。并没有解决 。

5、失望中,试着依次重启了主机、从机的MySQL。然后就可以咯

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaowang798abc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值