注意事项:
mysql主从配置中,从服务器的软件版本可以比主服务器高,但一定不能比主服务器低
 
初始化mysql主从服务器的配置:
 
在两台主机上安装好mysql服务,测试其能否正常启动
 
主服务器上创建用户:
mysql> grant replication client,replication slave on *.* to repl@'172.16.0.0/16' identified by '123456';(网络地址后要加掩码)
mysql> flush privileges;          刷新权限
mysql> show grants for repl@'172.16.0.0';
 
从服务器的配置:
[root@rs2 ~]# vim /etc/my.cnf
server-id       = 12修改从服务器ID,避免与主服务器相同
innodb_file_per_table=1启用每个文件每张表空间
#log-bin=mysql-bin 关闭二进制日志
relay-log=relay-bin 启用中继日志
relay-log-index=relay-bin.index
[root@rs2 ~]# service mysqld start
mysql> show slave status;
mysql> help change master to
Syntax:
CHANGE MASTER TO option [, option] ...
  | MASTER_HOST = 'host_name'(主机名或IP地址都可以)
  | MASTER_USER = 'user_name'(使用哪个用户到主服务器进行复制)
  | MASTER_PASSWORD = 'password'(用户密码)
  | MASTER_LOG_FILE = 'master_log_name'(从中间复制时指定从哪个日志文件开始复制和开始复制的位置)
  | MASTER_LOG_POS = master_log_pos
 
mysql> change master to
    -> master_host='rs1.gao.com',
    -> master_user='repl',
    -> master_password='123456';
mysql> start slave; 
mysql> show slave status\G; 
        Relay_Master_Log_File: 查看是否正常启动
             Slave_IO_Running: Connecting
             Slave_SQL_Running: Yes   
如果状态显示有如下错误:         
Last_SQL_Error: Error 'Duplicate entry '%-test-' for key 'PRIMARY'' on query. Default database: 'mysql'. Query: 'INSERT INTO db SELECT * FROM tmp_db WHERE @had_db_table=0
则处理方法如下:
主服务器
mysql> flush master;
mysql> show master status;
从服务器
mysql> flush slave;
mysql> show master status;
mysql> change master to master_host='172.16.3.3', master_user='repl', master_password='123456';
mysql> start slave;
mysql> show slave status\G
若从服务器状态显示正常,则继续执行如下操作:
在主服务器上修改数据,在从服务器上查看,验证是否正常
mysql> show processlist;查看从服务器上语句执行是否正常
mysql> show slave status\G
        Seconds_Behind_Master: 0显示从服务器比主服务器慢多少秒
  
主服务器上已经存在大量数据,而从服务刚初始化的主从配置:
主服务器配置:
先对数据进行备份
mysql> set sql_log_bin=0;
[root@rs1 ~]# mysqldump --all-databases --single-transaction --flush-logs --master-data=2 > /backup/db.sql.2012-12-05
mysql> set sql_log_bin=1;
将备份数据复制到从服务器上
[root@rs1 ~]# scp /backup/db.sql.2012-12-05 rs2:/tmp
在从服务器上进行数据同步:
mysql> source /tmp/db.sql.2012-12-05
[root@rs2 tmp]# head -30 db.sql.2012-12-05
找到以-- CHANGE MASTER TO MASTER_LOG开头的行,如下所示:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=107;
记录使用的二进制文件以及语句执行的位置,执行如下语句:
mysql> change master to master_host='172.16.3.3', master_user='repl', master_password='123456',MASTER_LOG_FILE = 'mysql-bin.000002',MASTER_LOG_POS =107;
mysql> start slave;
mysql> show slave status\G
在主服务器上修改数据,在从服务器上进行验证