之前很多朋友都想知道MySQL主从复制的配置步骤,今天就来了。伴随着您可能遇到的每一个例外。配置环境操作系统:两台CentOS7.6Linux系统数据库版本:MySQL5.6.39主服务器IP:192.168.0.1从服务器IP:192.168.0.2在安装数据库之前,我已经详细说明了如何在CentOS上一步安装MySQL。配置前提1、需要保证3306端口有防火墙打开或关闭,安装MySQL时有介绍。2、两台服务器可以互相ping通。--在192.168.0.2上输入ping命令,ping192.168.0.1--在192.168.0.1上输入ping命令,ping192.168.0.23。成功安装一个MySQL后,用虚拟机克隆一个作为从服务器。配置主(Master)数据库1.修改数据库配置文件[root@localhost~]#vi/etc/my.cnf将里面的内容改为:[mysqld]#打开二进制日志log-bin=mysql-bin#Identifyuniqueid(必填),一般使用ip的最后一位server-id=1#不同步的数据库,可以设置多个binlog-ignore-db=information_schemabinlog-ignore-db=performance_schemabinlog-ignore-db=mysql#指定数据库需要同步(与slave匹配),可以设置多个binlog-do-db=test添加日志存储方式和规则(可选):#设置存储方式,不设置默认binlog_format=MIXED#日志清理时间expire_logs_days=7#LogSizemax_binlog_size=100m#Cachesizebinlog_cache_size=4m#Maximumcachesizemax_binlog_cache_size=521m注:我设置的日志存储容量比较小,当然大家可以根据实际情况修改。2、重启数据库服务mysqldservicemysqldrestart如果你按照上面正确安装了mysql,这里可以正常重启。如果启动不正常,会出现如下错误:TheserverquitwithoutupdatingPIDfile...需要使用如下命令查看mysqld进程是否还存在。如果有ps-ef|grepmysqld,可以用命令:kill-9mysqld的进程号结束,然后重启mysqld。以上情况我都遇到过。当然,还有其他原因。这里有其他可能原因的解决方法供参考:https://javawind.net/p141。3、登录MySQL数据库允许从库获取主库日志[root@localhost~]#mysql-uroot-p注意:首次登录不需要输入root密码。进入后进行如下配置:#给从库mysql权限>GRANTFILEON*.*TO'root'@'192.168.0.2'IDENTIFIEDBY'rootpassword';#Createusermysql>GRANTREPLICATIONSLAVEON*.*TO'root'@'192.168.0.2'IDENTIFIEDBY'rootpassword';#修改用户权限mysql>selecthost,user,passwordfrommysql.user;#检查是否修改成功mysql>FLUSHPRIVILEGES;#刷新权限4.重启MySQL服务,登录MySQL,查看主库信息[root@localhost~]#servicemysqldrestart#重启mysql服务[root@localhost~]#mysql-uroot-p#登录tomysqlmysql>showmasterstatus;#查看master的状态大致显示如下内容:+----------------+----------+-------------+---------------------------------+------------------+|文件|当前位置|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|+----------------+--------+-------------+---------------------------+------------------+|mysql-bin.000006|120|ufind_db|information_schema,performance_schema,mysql|+-------------------+------------+------------+------------------------------+------------------+1行集合(0.00秒)注意:如果这一步一直是Emptyset(0.00sec),说明之前的my.cnf没有配置正确,请返回重新检查配置步骤配置从(Slave)数据库1.修改数据库配置slave的文件[root@localhost~]#vi/etc/my.cnf将里面的内容改成#Openbinaryloglog-bin=mysql-binserver-id=2binlog-ignore-db=information_schemabinlog-ignore-db=performance_schemabinlog-ignore-db=mysql#与主数据库配置一致replicate-do-db=testreplicate-ignore-db=mysqllog-slave-updatesslave-skip-errors=allslave-net-timeout=602。重启MySQL服务,登录MySQL[root@localhost~]#servicemysqldrestart[root@localhost~]#mysql-uroot-p修改如下:#CloseSlavemysql>stopslave;#设置连接master数据库信息mysql>changemastertomaster_host='192.168.0.1',master_user='root',master_password='root密码',master_log_file='mysql-bin.000006',master_log_pos=120;#打开Slavemysql>启动slave;注意:上面的master_log_file是配置Master时的File字段,master_log_pos是ConfigureMaster的Position字段。必须是一一对应的。3、查看slave数据库状态信息mysql>showslavestatus\G;如果成功,将显示以下信息:******************************1.row**************************Slave_IO_State:等待master发送事件Master_Host:192.168.0.1Master_User:rootMaster_Port:3306Connect_Retry:60Master_Log_File:mysql-bin.000006Read_Master_Log_Pos:120Relay_Log_File:localhost-relay-bin.000006Relay_Log_Pos:520Relay_Master_Log_File:mysql-bin.000006Slave_IO_Running:Yes//显示yes表示成功Slave_SQL_Running:Yes//显示yes表示成功对于no,一般master没有启动。Replicate_Do_DB:testReplicate_Ignore_DB:mysql//以上是配置文件中的信息。Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno:0Last_Error:Skip_Counter:0Exec_Master_Log_Pos:357Relay_Log_Space:697Until_Condition:NoneUntil_Log_File:Until_Log_Pos:0Master_SSL_Allowed:NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master:0Master_SSL_Verify_Server_Cert:NoLast_IO_Errno:0Last_IO_Error://如果为no,此处会显示错误信息Last_SQL_Errno:0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id:2Master_UUID:be0a41c0-2b40-11e8-b791-000c29267b6aMaster_Info_File:/usr/local/mysql/data/master.infoSQL_Delay:0SQL_Remaining_Delay:NULLSlave_SQL_Running_allrelay:Slavening_log等待从I/O线程更新它Master_Retry_Count:86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position:01rowinset(0.00sec)ERROR:Noqueryspecified注:如果Slave_IO_Running:No并且出现下面的错误Last_IO_Error:Fatalerror:TheslaveI/OthreadstopsbecausemasterandslavehaveequalMySQLserverUUIDs;theseUUIDsmustbedifferentforreplicationtowork.意思是主服务器的UUID和从服务器的UUID重复了,因为我是安装一个数据库成功后直接克隆的,所以他们的UUID是一样的,就会报这个错。可以修改从库的UUID。我们首先从图书馆的数据库中生成一个UUID。mysql>选择UUID();复制从数据库中查询到的UUID,然后编辑从库的UUID配置文件。如果你像我一样安装的,那么这个配置文件的路径应该是这里:[root@localhost~]#vi/usr/local/mysql/data/auto.cnf输入后是一串32位长的UUID,替换成我们刚刚在数据库中查询生成的UUID即可。如果Slave_IO_Running:No则出现如下错误。从二进制日志中读取数据时从主机收到致命错误1236:“无法在二进制日志索引文件中找到第一个日志文件名”。解决方法:resetmysql>stopslave;//停止mysql>重置slave;//重置mysql>启动slave;//启动整个过程并配置它。可能有朋友会问,这些配置文件我都配置过了,信息和你的一样,但是还是不确定配置是否成功。然后就可以在主服务器上创建一张表,然后在从服务器上查询新创建的表是否存在。提示1。关于增删改查,主从数据不一致问题:#select语句,暂时没发现问题#insert语句,暂时没发现问题#update语句,暂时没发现问题是#delete语句,主库删除多条数据,发现数据不一致原因:主库logbin中确实有delete语句,但是从库logbin中没有delete语句解决方法:使用usedatabase在当前数据库结构中选择需要操作的数据库,然后执行删除,OK,同步成功。2、查询binlog主从日志的方法#查看所有binlog文件mysql>showbinarylogs;#查看binlog是否开启NO表示开启mysql>showvariableslike'log_bin%';#Detailedinformationmysql>showvariableslike'binlog%';#查看binlog日志mysql>showbinlogeventsin'mysql-bin.000019';#或者使用mysqlbinlog,如果报错,使用--no-defaults(使用完整路径)[root@localhost~]#/usr/local/mysql/bin/mysqlbinlog--no-defaults/usr/local/mysql/数据/mysql-bin.0000193。手动清理master日志,最好关闭日志,在/etc/my.cnf#Manuallyrefreshthelogmysql>showmasterstatus;#Deleteallmysql>resetslave;或restmaster;#DeleteMySQL-bin.004mysql>PURGEMASTERLOGSTO'MySQL-bin.004';另外,如果你修改了最大连接数,可能已经有mysql配置文件中的连接数改成1000以上,但是查询数据库的最大连接数一直是214,你可以试试以下方法:https://www.cnblogs.com/brucetang/p/9733998.html参考https://javawind.net/p141https://www.cnblogs.com/brucetang/p/9733998.html
