主从复制配置:
编辑主服务器 的配置文 件:my.cnf
server-id = 1
log-bin
binlog-do-db=需要备份的数据库名,如需设 置 多个数据库,重复设置 这 个选项即可
binlog-ignore-db=不需要备份的数据库名,如需设置多个数据库,重复设置这个选项即可。
编辑从服务器的配置文件:my.cnf
server-id=2(配置多个从服务器时依次设置id号)
master-host=主机
master-user=用户名
master-password=密码
master-port=端口
replicate-do-db=需要备份的数据库名,如需设置多个数据库,重复设置这个选项即可启动MYSQL并进行配置
1) 在主服务器上为从服务器建立一个用户(建立复制帐号权限):grant replication slave on *.* to‘用户名‘@’ 主机’identified by‘密码’;(在MySQL 4 dot 0.2以前,用FILE权限来代替REPLICATION SLAVE)
*如果打算在slave上执行LOAD TABLE FROM MASTER或LOAD DATA FROM MASTER语句,那么必须给该帐户授予附加权限:授予全局SUPER和RELOAD权限。授予对想要加载的所有表上的SELECT权限。在master 上任何没有SELECT权限的表都会被LOAD DATA FROM MASTER略过。
2) 将数据从主服务器中导出并导入从服务器
Mysql> flush tables with read lock; #锁定主服务器上的表为只读状态
Mysql> show master status; #查看主节点的状态[root@server02]# mysqldump -uroot -p --skip-opt --single-transaction --add-drop-table --create-options --quick --extended-insert --set-charset --disable-keys CPMS > cpms.sql #创建一个完整的备份
3)
[root@server02]# scp cpms.sqlroot@172.20.86.27:/tmp # 把数据传输到从节点上
[root@server02]# mysql CPMS < /tmp/cpms.sql #把数据导入到从节点Mysql>change master to master_host = '主服务器IP', master_user = '刚才建立用来复制的用户名', master_password = '复制用户名的密码', master_log_file = 'mysql-bin.000004', master_log_pos =98; #设置从节点连接主节点(master_log_file和master_log_pos这个需要在主服务器中通过show master status;查看得来)
Mysql>slave start; #启动复制
4) show slave status/G查看复制状态
查看状态 及调试
1,查看master的状态
SHOW MASTER STATUS;
Position不应为0
2,查看slave的状态
show slave status;
Slave_IO_Running | Slave_SQL_Running这两个字段 应为YES|YES.
show processlist;
会有两条记录与同步有关state为Has read all relay log; waiting for the slave I/O thread to update it
和s Waiting for master to send event .
3,错误日志
MySQL安装目录/data/Hostname.err
4,CHANGE MASTER TO
如果A的Slave未启动,Slave_IO_Running为No.
可能会是B的master的信息有变化,
查看B SHOW MASTER STATUS;
记录下File,Position字段.假设为'mysql_binary_log.000004',98 ;
在A下执行:
Stop Slave;
CHANGE MASTER TO
MASTER_LOG_FILE = 'mysql_binary_log.000004',
MASTER_LOG_POS = 98 ;
Start Slave;
5,SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n;
如果A的Slave_SQL_Running为No.
Err文件中记录:
Slave: Error 'Duplicate entry '1' for key 1' on query....
可能是master未向slave同步成功,但slave中已经有了记录。造成的冲突.
可以在A上执行
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = n;
跳过几步。再
restart salve;
6,如果从服务器同步失败show slave status/G出现如下报错:
Last_IO_Error: error connecting to master '用户名@主服务器:3306' - retry-time: 1 retries: 86400
可在MySQL中执行如下命令:
STOP SLAVE;
RESET MASTER;
RESET SLAVE;SLAVE START;