数据库主从
mysql

今天来研究主从同步问题,
工具:两台linux服务器
目标:实现两台服务器数据的同步。
服务器选择的是阿里云服务器,自带内网ip,不过打通的话要写工单申请。
先授权
grant all on *.* to Username@x.x.x.x identified by 'password';
最好是
grant replication on 目标数据库.* to Username@x.x.x.x identified by 'password';
这样安全一点
授权成功后,另一台服务器通过
mysql -uUsername -ppassword -hx.x.x.x
登陆
这样就实现了远程数据库登陆。
开启Mysql bin-log日志
vi /etc/my.cnf
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
log-slow-queries=mysql-slow.log //开启慢查询日志
log-error=mysql.err //开启错误日志
log-bin=mysql-bin //开启bin-log日志
顺便说一下bin-log日志的常见操作
mysql>flush logs; //此时会多一个最新的bin-log日志 mysql>show master status; //查看最后一个bin日志 mysql>reset master; //清空所有的bin-log日志
bin-log日志的查看
which mysqlbinlog //查看mysqlbinlog位置 /usr/bin/mysqlbinlog --no-defaults mysql-xxxxxxxx /usr/bin/mysqlbinlog --no-defaults mysql-xxxxx ! /var/lib/mysql -uroot -pxxxxx 数据库 //恢复
附几个常用参数
--stop-position=''
--start-postion=''
--stop-date='2014-10-14 15:50:00'
--start0date='2014-10-14 15:50:00'
数据库备份可以这样备份
mysqldump -uroot -pxxxxx 数据库 -l(这是写锁)-F(更新bin-log日志) '/xx/xxx(存放路径)'
使用
scp ./xxxxx.sql x.x.x.xxx:/tmp/
隧道传输
数据库还原
mysql -uroot -pxxx test -v(查看导入详细信息) -f(当中间遇到错误时,可以忽略)< xx/xxx
为什么要主从复制?
1、如果主服务器出现问题,可以快速切换到从服务器提供的服务。
2、可以在从服务器上执行查询操作,降低主服务器的访问压力。
3、可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。
注意:一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据库仍然需要从主数据库获得。
最后一步:在从数据库配置中加入
master-host = x.x.x.x //主服务器ip
master-user = username
master-password = password
master-port = 3306
这样就实现主从一致
当主从出现问题怎么办?
查看slave状态
mysql>show slave status\G
处理 好以后。继续同步
mysql> slave stop;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> slave start;