原理mysql主服务器运行进程,将表的写操作计入binlog,从服务器运行两个进程,其一,从主服务器取回数据binlog,另一个,运行其中的sql,使从服务器更新。

设置:原则上要求主机从机系统、数据库系统版本一致。如果不一致,从机的数据库版本要高于主机。

主服务器:192.168.3.4

从服务器:192.168.3.5

一、主服务器

1、  配置mysql

$  vim /etc/my.cf

找到[mysqld]加入

log-bin=mysql-bin  #开启binlog

server-id=1 #保证此ID主从各服务器间唯一

$ service mysqld restart

 

2、  创建同步用户 replication

GRANT REPLICATION SLAVE ON *.*  TO  replication @192.168.3.5 IDENTIFIED BY "mysql_password"

意义:授予从服务器复制权限

测试:在从服务器上用mysql -u replication –h192.168.3.4 –pmysql_password连接主机。

3、  创建主服务器快照

$ mysqldump –u root  -ppassword --master-data  mysql_test > mysql_test.sql

$ mysqldump -uroot -ppassword --master-data --all-databases>mastersql2slave.sql (如果需要所有库使用)  

 意义相当于给从服务器形成一个同步的起点。  

4、  记录binlogfilenameposition

$ mysql -uroot -ppassword -e"show master status\G"

*************************** 1. row ***************************

            File: mysql-bin.000016

        Position: 2220977

    Binlog_Do_DB:

Binlog_Ignore_DB:

 

 

二、从服务器

1、  修改mysql配置

$ vim /etc/my.cf

找到[mysqld]加入:

server-id=2 #保证此ID主从各服务器间唯一

 如果只想做某一个库的主从同步,可以在[mysqld]段写上:

replicate-do-db=mysql_test 

 

2、导入数据库

 mysql -u root  -ppassword   mysql_test < mysql_test.sql

3、  运行master转向语句。

如果同步正在进行,运行stop slave停止同步。

$ mysqldump –u root  -ppassword

>CHANGE MASTER TO

MASTER_HOST='192.168.3.4',MASTER_PORT=3306,MASTER_USER='replication',MASTER_PASSWORD='mysql_password',MASTER_LOG_FILE='mysql-bin.000016',MASTER_LOG_POS=2220977;

 

3、  开启同并机制.      start slave

检查:

1 从服务器上运行show slave status\G;

2 如果:Slave_IO_Running: Yes并且Slave_SQL_Running: Yes则配置成功。如果不能同步,则有可能同步库名有问题。

3 如果:Slave_IO_Running: No。则可能的原因是网络问题,binglog设置错误,host设置错误等等。

4 如果:Slave_SQL_Running: No。则可能的原因是sql语句执行报错等等,有可能是主从数据库结构有问题。

       5)   如遇3)4)问题,可在解决后运行start slave io_thread   start slave sql_thread 启动进程。直至2)情况。

6)此时在服务器的mysql数据文件目录下应该有形如:

111118 14:07:04 [Note] /usr/local/mysql/libexec/mysqld: ready for connections.

Version: '5.0.45-log'  socket: '/tmp/mysql.sock'  port: 3306  Source distribution

111118 14:07:04 [Note] Slave SQL thread initialized, starting replication in log 'mysql-bin.000016' at position 2220977, relay log '

记录如默认叫hostname.err的文件里。