mysql主从复制

来源:互联网 发布:mac优酷没有弹幕 编辑:程序博客网 时间:2024/06/05 10:42

mysql主从复制

1  原理

             复制过程中,一个服务器充当主服务器,而一个或多个其他服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引,以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接到主服务器时,它通知主服务器,从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时发生的任何更新,然后封锁并等待主服务器通知更新。

  MySQL复制技术有以下的特点:

数据的分布、

负载平衡、

备份、

备可用性和容错行


2 准备工作
       我是在 virtualBox上准备了2台虚拟机,可以先准备一台,然后复制一份改下ip即可,桥接模式,直接用yum方式安装mysql5.7.20。
两台服务器分别ip为192.168.1.97(master)和192.168.1.96(slave),保证能互相ping通。

3 配置
mysql配置文件在/etc/my.cnf 
master配置
log_bin=mysql-bin   二进制日志,也成为二进制日志,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘中 , 必须写。
配置mysql的root密码

vi /etc/my.cnf
   在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。
重启mysql service mysqld restart
  然后 输入 mysql 进入mysql 然后 use mysql 然后执行改密码UPDATEuserSETPassword=password('new-password')WHEREUser='root';
最后flush privileges;刷新立即执行。
  然后service mysqld stop; 最后进入my.cnf 中删除skip-grant-tables 最后重启mysql 用mysql -u root -p 密码登录就可以了。

 配置远程访问mysql

开放3306端口。可参考网上方法 https://www.cnblogs.com/fnlingnzb-learner/archive/2016/09/01/5830661.html
复制一份mater虚拟机到改名slave 
slave配置

启动master和slave

    在主服务器上建立帐户并授权slave:
      mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'192.168.1.96' identified by 'q123456'; //一般不用root帐号,          “%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。  

      这里要注意   要现在master上建立一个账号 供slave来访问用  这里直接用账号mysync  密码 q123456  

@'192.168.1.96'表示允许这个ip来访问master 如果写成% 这表示允许全部ip都能访问 。 这里设置密码有点坑 会报错

mysql5.7设置简单密码报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

参考 http://blog.csdn.net/kuluzs/article/details/51924374 改配置使mysql不验证密码的难易程度。

把密码这个验证变成low就好了。

接下来查看master状态 

这两个参数很重要 。

接下来切到slave上 ,change master tomaster_host='192.168.1.97',master_user='mysync',master_password='q123456',
          master_log_file='mysql-bin.000004',master_log_pos=966;

这里的的

master_log_file 

master_log_pos 是master上的值。切记。  查看slave中mysql的状态命令 show slave status\G

会发现  


然后 这是成功的样子 现实会出现  Slave_IO_Running: No  这时候查看日志就十分重要了  日志在  mysql 日志在 /var/log/mysqld.log   可以查看日志发现问题。查看日志十分重要。会发现报错 Theslave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. 表示mysql的server_uuid相同了 因为我是配置好master的mysql然后复制的master变成的slave。这就要更改server_uuid了 这也是坑 网上说了很多,要找到auto.cnf,网上说的很多在data/auto.cnf 但是我没找到这个文件夹 。最后

show variables like '%data%';


终于发现了auto.cnf 在 /var/lib/mysql/   下面  ,打开auto.cnf  更改server_uuid 只要不一样就行。

然后关闭slave    stop slave;  重新执行执行change master to master_host='192.168.1.97',master_user='mysync',master_password='q123456',
         master_log_file='mysql-bin.000004',master_log_pos=966;  启动 start slave ;即可

在配置的过程中遇到很多坑,网上找了很多资料,注意一点 ,如果没有效果就多看日志,看日志很重要。谢谢大家。




   

 


原创粉丝点击