原理: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、 记录binlog的filename和position。
$ 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的文件里。