搜档网
当前位置:搜档网 › 数据库主从同步配置及错误解决方案

数据库主从同步配置及错误解决方案

数据库主从配置文档

1.环境要求:
只要是mysql的版本相同(在这里我用的是一台linux服务器10.23.124.68做主的服务器,
我自己本地的windowns下做从数据库(10.23.122.197)做从数据库);
2.初始化表,并在后台启动


3. 修改主服务器 master:


vi /etc/https://www.sodocs.net/doc/d9176815.html,f //这里一定要注意是etc下面的配置文件


[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=222 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
binlog-do-db=mydb #可选项,需要同步的数据库,如果没有本行,即表示同步所有的数据库
binlog-ignore-db=mysql #可选项,被忽略的数据库


4 修改从服务器 slave


(1)linux 环境下 vi /etc/https://www.sodocs.net/doc/d9176815.html,f
[mysqld]
log-bin=mysql-bin [非必须]
server-id=26 //[必须]服务器唯一ID,默认是1,一般去IP的最后一段


(2)windows 环境下 修改配置文件 my.ini文件

找到 [mysqld]

log-bin=mysql-bin [非必须]
server-id=26 //[必须]服务器唯一ID,默认是1,一般去IP的最后一段


5 重启两台服务器的mysql


/usr/local/mysql/ service mysqld start;


在主服务器上建立账户并授权 slave;


mysql]# mysql -uroot -p*******
grant replication slave on *.* to 'slave'@'10.23.122.19%' identified by 'q123456';


注意: 这是允许10.23.122.19{0---9}机器来链接master机器,也可以是%了,代表允许所有的机器来链接;


6.登录主服务器的mysql,查询master的状态


mysql>show master status\G PS:这里的\G后面不加;要不会报错
**************************************************************
File: mysql-bin.000001
Position: 120
Binlog_Do_DB: xintg
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)


记住 File:mysql_bin.000001; Position:120 这两个数值(后面要用到)
PS: 此时的数据库不能有任何操作,防止主服务器状态值变化


7.配置从服务器Slave;

mysql> stop slave; (PS:如果不执行这句话,下面会报错的)

mysql> Change master to master_host='10.23.124.68',master_user='slave',master_password='q123456',
-> master_log_file='mysql-bin.000001',
-> master_log_pos=120;

(PS:这里master_log_file的值是6 查询出来的值,这里master_log_pos的值是6 查询出来的值,)
mysql> start slave;// 启动二进制复制

8. 查看从服务器的状态 Slave ;

mysql> show slave status\G

*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.23.124.68 //主服务器地址
Master_User: slave //授权帐户名,尽量避免使用root
Master_Port: 3306 /

/数据库端口,部分版本没有
Connect_Retry: 60
Master_Log_File: mysql-bin.000001 (PS:这里是同上的)
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000001
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
......


Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件

Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。

(PS:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。)

关于 Slave_IO_Running: NO 解决方案:这是在主服务器上给丛服务器授权没有成功 返回查看(5)的执行

关于 Slave_SQL_Running:NO 解决方案 这是主服务器的二进制文件,端口号和丛服务器的二进制文件不一致造成的 ,还有就是master_log_pos的位置大于主服务器的位置,从新执行(6,7)这两个步骤
以上操作过程,主从服务器配置完成。

9,主从服务器测试;
自己可以在主服务器上建表,对数据进行操作,这里就不解释了

10, 关于主从配置以后,主服务器重启以后,主从配置断开连接的解决方案:
主服务器重启以后,进入数据库
mysql>reset master; //清除原来的二进制文件(对数据库里面的数据不会有影响)
查看主服务器的master状态:
mysql> show master status\G
**************************************************************
File: mysql-bin.000001
Position: 120
Binlog_Do_DB: xintg
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

这里解释一下为什么要清除二进制文件:因为你重启以后,原来的二进制文件失效,比如现在他的二进制文件是
mysql-bin.000001,重启以后就会生成新的文件mysql-bin.000002

关于主从以后,从数据库重启以后,主从不同步的解决方案:

原因是重启以后从数据的slave不能自动开启;

需要进入mysql 执行以下命令
mysql> start slave













相关主题