MySQL主从同步步骤:
配置前,为了无误,先将权限(远程访问)、防火墙等处理: 关闭windows/linux防火墙: windows:右键“网络”, linux: service iptables stop Mysql允许远程连接(windowos/linux): GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; FLUSH PRIVILEGES;
主机:(配置文件中不要写注释汉字进去,写进去有时会出现莫名其妙的各种问题) 1、先创建一个同步数据的用户 CREATE USER 'slave'@'localhost' IDENTIFIED BY '123456'; FLUSH PRIVILEGES; #授权哪台计算机中的数据库 是自己的从数据库 grant replication slave,reload,super on *.* to 'slave'@'192.168.66.%' identified by '123456'; (其中192.168.66.% 代表从库的地址) FLUSH PRIVILEGES; 2、修改 /etc/my.cnf [mysqld] server-id=1 #二进制日志文件 log-bin=mysql-bin #错误记录文件 log-error=mysql-error #主从同步时 忽略的数据库 binlog-ignore-db=mysql #(可选)指定主从同步时,同步哪些数据库 不指定的话就同步所有数据库 binlog-do-db=test expire_logs_days=10 # 设置二进制日志保存日期(定义了mysql清除过期日志的时间) max_binlog_size=500M # 设置 每个 binlog 文件的大小 修改完后重启mysql服务 3、查看主数据库的状态(每次在做主从同步前,需要观察 主机状态的最新值) show master status; (mysql-bin.000001、 154)
从机: 1、修改 /etc/my.cnf [mysqld] server-id=2 log-bin=mysql-bin replicate-do-db=test #表示同步那个数据库,不设置表示同步所有 slave-skip-errors=all # mysql 复制可能出现主服务器上可以运行的语句,从服务器不能够运行,所以我们在 my.cnf 加一句 slave-skip-errors=all 意思是忽略所有的 sql 语句错误! relay-log=mysql-relay-bin # 该文件用于存放 Slave 端的 I/O 线程从 Master 端读取的二进制文件信息 修改完后重启mysql服务 2、设置哪台计算机中的数据库 是自己的主计算机 CHANGE MASTER TO MASTER_HOST = '192.168.66.132', MASTER_USER = 'slave', MASTER_PASSWORD = '123456', MASTER_PORT = 3306, master_log_file='mysql-bin.000001', master_log_pos=154; 其中mysql-bin.000001和154是主库中状态查到的。 start slave; 检验 show slave status \G 主要观察: Slave_IO_Running和 Slave_SQL_Running,确保二者都是yes;如果不都是yes,则看下方的 Last_IO_Error。 本次 通过 Last_IO_Error发现错误的原因是 主从使用了相同的server-id, 检查:在主从中分别查看serverid: show variables like 'server_id' ; 可以发现,在Linux中的my.cnf中设置了server-id=2,但实际执行时 确实server-id=1,原因:可能是版本问题。 解决措施: stop slave; set global server_id =2 ; start slave ; show slave status \G 如果报错信息中是uuid的相关问题,可以 find / -name auto.cnf 找到该文件的位置,先停掉mysql服务,删除该文件,然后开启mysql服务。