1、 MySQL先得确认能被远程访问。
2、 设有A、B两台MySQL服务器,A为主服务器,B为从服务器(用来备份的服务器);
3、 先在主服务器上新建一个给从服务器使用的账户:
sql命令为:grant all privileges on *.* to ‘backup’@’%’ identified by ‘root’ with grant option;其中all privileges的意思是给予全部权限,*.*是全部数据库以及所属的表,backup是用户名,’%’是所有的IP地址,也可设为固定的IP,’root’是backup用户的密码。
4、 修改主数据库的my.ini配置内容,在Linux系统是my.cnf文件,不过配置内容基本一致,都是在[mysqld]下面增加内容:
(1) server-id=1#主数据库的进程,只要不和其他数据库进程代号冲突即可,一般是用服务器的最后ip来记录;
(2) log-bin=/var/mysqllog/log-bin.log#开启主数据库的二进制日志(改日志只记录数据库的修改,不记录查询),从数据库就是通过访问该日志来同步主数据库的,必须开启
(3) binlog_format=mixed#加上这个,主数据库修改数据就不会有警告了,默认不是这个的设置的。
其它可选的设置:
(1) binlog-ignore-db#指定要被同步的数据库,如果不设置,则为所有的数据库,官方建议在slave端使用,多个数据库,分割;
(2) binlog-do-db#不想被同步的数据库,要想过滤一些不想同步的数据库,官方建议在slave端使用,多个数据库用,分割;
(3) master-connect-retry=60#中断重新连接时间间隔为60秒。
5、 修改从数据库的my.ini(或my.cnf),在[mysqld]下面增加:
(1) server-id=2#从服务器B的ID值。注意不能和主服务器的ID值相同;
(2) master-host=192.168.1.247#主服务器的IP地址;
(3) master-user=backup#从服务器连接主服务器的账号;
(4) master-password=root#从服务器连接主服务器的账号密码;
(5) master-port=3306#主服务器端口
其它可选:
(1) replicate-do-db#需要同步的数据库,多个数据库用,分割;
(2) binlog-ignore-db#不需要同步的数据库,多个数据库用,分割;
(3) log-bin=/var/mysqllog/log-bin.log#二进制变更日志,适用与双向同步,单向同步可以不设置
(4) master-connect-retry=60#同步时间间隔为60秒
如果从数据库data文件夹下存在master.info、relay-log.info就先停止从数据库的MySQL(net stop mysql或者Linux下为service mysql stop),然后删除两个文件,以后如果修改主服务器和从服务器的my.ini(或my.cnf)配置,都要停止从服务器,然后删除这两个文件,因为从数据库的不会重复生成这两个文件。
6、 这一步比较关键,要将主服务器需要同步的数据库都要拷贝到从服务器上来,网上有很多种方式,包括直接复制data文件夹里面的数据库文件。但是本人操作失败…所以使用的是直接从主服务器导出文件,然后停止主服务器,在从服务器上通过备份的文件建立起数据库,然后也停止,之后同时启动主从服务器上的MySQL来达到第一次基本一致的人工手动同步备份;
7、 检测是否同步与排错
可以用以下命令查看:
(1) 在slave从服务器B上输入:show slave status;主要查看Slave_IO_Running:Yes(#注:如果这个为No,可以重新修改配置文件中与slave相关的配置信息,然后必须停止MySQL删除master.info之类的文件,在上文提到过,重启MySQL即可解决。如果不能解决则可能是彼此之间的通讯问题或其它,我的话就是通讯问题,所以要确保MySQL是能被远程访问的。)Slave_SQL_Running:Yes(#注:如果这里为No,很有可能是因为你的A库和B库的数据库不一致造成的,本人遇到过,就是第6步没有达到基本的同步造成。停止主从服务器MySQL服务后删除A库中所有log-bin.log文件和B库所有的relay_log文件,并重启AB服务器即可解决,不过要同时开启)。Seconds_Behind_Master是否为0,0就是已经同步。
(2) 在Master主服务器A上输入show processlist;
mysql>show processlist\G; 出现Command: Binglog Dump表示已经同步成功。
备注(特此说明为网上的办法,本人没有试过):
MySQL主从复制经常出现的Slave_IO_Running:No或Slave_SQL_Running:No问题解决办法:在主数据库上查看POS位置:
mysql>show master status;
将查询到的信息给在从数据库上mysql>slave stop;
mysql>change master to Master_Log_File=’mysql-bin.000001’, Master_Log_Pos=98;
mysql>slave start;
mysql>show slave status;
问题解决。
(PS:本文为网上资料参考,再自己试过,可能情况不同会有所不一样。)
2、 设有A、B两台MySQL服务器,A为主服务器,B为从服务器(用来备份的服务器);
3、 先在主服务器上新建一个给从服务器使用的账户:
sql命令为:grant all privileges on *.* to ‘backup’@’%’ identified by ‘root’ with grant option;其中all privileges的意思是给予全部权限,*.*是全部数据库以及所属的表,backup是用户名,’%’是所有的IP地址,也可设为固定的IP,’root’是backup用户的密码。
4、 修改主数据库的my.ini配置内容,在Linux系统是my.cnf文件,不过配置内容基本一致,都是在[mysqld]下面增加内容:
(1) server-id=1#主数据库的进程,只要不和其他数据库进程代号冲突即可,一般是用服务器的最后ip来记录;
(2) log-bin=/var/mysqllog/log-bin.log#开启主数据库的二进制日志(改日志只记录数据库的修改,不记录查询),从数据库就是通过访问该日志来同步主数据库的,必须开启
(3) binlog_format=mixed#加上这个,主数据库修改数据就不会有警告了,默认不是这个的设置的。
其它可选的设置:
(1) binlog-ignore-db#指定要被同步的数据库,如果不设置,则为所有的数据库,官方建议在slave端使用,多个数据库,分割;
(2) binlog-do-db#不想被同步的数据库,要想过滤一些不想同步的数据库,官方建议在slave端使用,多个数据库用,分割;
(3) master-connect-retry=60#中断重新连接时间间隔为60秒。
5、 修改从数据库的my.ini(或my.cnf),在[mysqld]下面增加:
(1) server-id=2#从服务器B的ID值。注意不能和主服务器的ID值相同;
(2) master-host=192.168.1.247#主服务器的IP地址;
(3) master-user=backup#从服务器连接主服务器的账号;
(4) master-password=root#从服务器连接主服务器的账号密码;
(5) master-port=3306#主服务器端口
其它可选:
(1) replicate-do-db#需要同步的数据库,多个数据库用,分割;
(2) binlog-ignore-db#不需要同步的数据库,多个数据库用,分割;
(3) log-bin=/var/mysqllog/log-bin.log#二进制变更日志,适用与双向同步,单向同步可以不设置
(4) master-connect-retry=60#同步时间间隔为60秒
如果从数据库data文件夹下存在master.info、relay-log.info就先停止从数据库的MySQL(net stop mysql或者Linux下为service mysql stop),然后删除两个文件,以后如果修改主服务器和从服务器的my.ini(或my.cnf)配置,都要停止从服务器,然后删除这两个文件,因为从数据库的不会重复生成这两个文件。
6、 这一步比较关键,要将主服务器需要同步的数据库都要拷贝到从服务器上来,网上有很多种方式,包括直接复制data文件夹里面的数据库文件。但是本人操作失败…所以使用的是直接从主服务器导出文件,然后停止主服务器,在从服务器上通过备份的文件建立起数据库,然后也停止,之后同时启动主从服务器上的MySQL来达到第一次基本一致的人工手动同步备份;
7、 检测是否同步与排错
可以用以下命令查看:
(1) 在slave从服务器B上输入:show slave status;主要查看Slave_IO_Running:Yes(#注:如果这个为No,可以重新修改配置文件中与slave相关的配置信息,然后必须停止MySQL删除master.info之类的文件,在上文提到过,重启MySQL即可解决。如果不能解决则可能是彼此之间的通讯问题或其它,我的话就是通讯问题,所以要确保MySQL是能被远程访问的。)Slave_SQL_Running:Yes(#注:如果这里为No,很有可能是因为你的A库和B库的数据库不一致造成的,本人遇到过,就是第6步没有达到基本的同步造成。停止主从服务器MySQL服务后删除A库中所有log-bin.log文件和B库所有的relay_log文件,并重启AB服务器即可解决,不过要同时开启)。Seconds_Behind_Master是否为0,0就是已经同步。
(2) 在Master主服务器A上输入show processlist;
mysql>show processlist\G; 出现Command: Binglog Dump表示已经同步成功。
备注(特此说明为网上的办法,本人没有试过):
MySQL主从复制经常出现的Slave_IO_Running:No或Slave_SQL_Running:No问题解决办法:在主数据库上查看POS位置:
mysql>show master status;
将查询到的信息给在从数据库上mysql>slave stop;
mysql>change master to Master_Log_File=’mysql-bin.000001’, Master_Log_Pos=98;
mysql>slave start;
mysql>show slave status;
问题解决。
(PS:本文为网上资料参考,再自己试过,可能情况不同会有所不一样。)