备份数据:

mysqldump -uroot -p123456 test -l -F '/tmp/test.sql'
# -F即flush logs,可以重新生成新的日志文件,也包括bin-log日志,执行一次bin-log快照
# -l 读锁,备份的时候进行读锁,所有人都无法实现写的操作,但可以执行读的操作,避免出现备份数据遗失的情况

mysql>show master status;
# 查看binlog日志用

mysql主从复制
1、如果主服务器出现问题,可以切换至从服务器继续提高服务
2、可以在从服务器上执行查询,降低主服务器的访问压力
3、可以在从服务器上执行备份,以避免备份期间影响主服务器的服务

注意:一般只有更新不频繁的数据或者对实时性要求不高的数据可以通过从服务器查询,实时性要求高的数据依然需要从主服务器数据库获得

主服务器配置

1、主服务器导出sql,同时生成一个新的bin-log日志,同时设置读锁

# mysqldump -uroot -p123456 test -l -F '/tmp/201505031520_test.sql'

2、主服务器scp命令主服务器tmp传输到从服务器tmp目录下

# scp /tmp/201505031520_test.sql 192.168.88.131:/tmp/

修改主服务器的配置文件my.cnf,设置bin-log,并设置server-id的值
log-bin=mysql-bin
server-id=1
在主服务器上设置读锁定有效,确保没有数据库操作,以便获得一个一致性的快照:

mysql>flush tables with read lock;

查看主服务器上当前的二进制日志名和偏移量值

mysql>show master status;

目前主数据库服务器已经停止更新操作,生成主数据库的备份,备份操作方式如下
1、cp全部的数据
2、mysqldump备份数据方法
如果主数据库的服务可以停止,那么直接cp数据库文件应该是最开的生成快照的方法

主数据库备份完毕后,主数据库可以恢复写操作,生效的操作只需要在从服务器上去执行

mysql>unlock tables;

把主数据库的一致性备份恢复到从数据库上,把以上的压缩包解压后放到相应的目录即可

从服务器配置
修改从数据库的server-id,注意server-id的值必须是唯一的,不能和主数据库的配置相同,如果有多个从服务器,则每个从服务器必须有自己唯一的server-id值
3、从服务器,导入sql到mysql里面

mysql -uroot -p123456 test < /tmp/201505031520_test.sql

4、配置从服务器my.cnf文件

log-bin=mysql-bin
server-id=2
master-host=192.168.88.129
master-user=user1
master-password=456
master-port=3306

5、登录从mysql,查询
show slave status\G
如果显示下面两行,则表示成功,必须两行都显示!!!Yes
Slave_IO_Running: Yes #此进程负责从服务器从主服务器上读取binlog日志,并写入从服务器上的中继日志中
Slave_SQL_Running: Yes #此进程负责读取中继日志中的binlog日志

6、登录主服务器,查询
show master status\G

常见mysql从服务器命令
start slave #启动复制线程
stop slave #停止复制线程
show slave status #查看从数据库状况
show master logs #查看主数据库bin-log日志
change master to #动态改变到主服务器的配置
show processlist #查看从数据库运行状况

主从配置常见错误
从数据库无法同步
Show slave status 显示Slave_SQL_Running为No,Seconds_Behind_Master为null
原因:
a,程序可能在slave上进行了写操作
b,也可能是slave机器重启后,事务回滚造次的
解决:
方法一
mysql>slave stop;
mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql>slave start;
方法二
Slave库,mysql>slave stop;
Master库,mysql>show master status;
得到主服务器上当前二进制日志名和偏移量

查看状态,然后到slave服务器上执行手动同步
mysql>change master to
master_host="192.168.88.129",
master_user="user1",
master_password="456",
master_port=3306,
master_log_file="mysql-bin.000003",
master_log_pos=98;
启动slave
mysql>slave start;
通过show slave status查看Slave_SQL_Running为Yes,Seconds_Behind_Master为0即为正常


甄城
1.2k 声望35 粉丝

引用和评论

0 条评论