1、准备工作
主从数据库版本最好一致
主从数据库内数据保持一致
我的主从服务器的IP为:
主服务器ip:192.168.84.128
从服务器ip:192.168.0.100
2、找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/my.cnf,在[mysqld]部分插入如下三行:
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id server-id要唯一
binlog_do_db=test #设置开启二进制日志文件的数据库,也就是要同步的数据库
binlog_format=mixed #二进制日志的格式,有三种:statement/row/mixed,具体分别不多做解释,这里使用mixed
配置完重启mysql
3、在主数据库创建用于同步的账号
mysql> GRANT replication slave ON *.* TO 'myuser'@'192.168.0.100' IDENTIFIED BY 'mypassword'; #分配权限
mysql>flush privileges; #刷新权限
4、查看master状态,记录二进制文件名(mysql-bin.000004)和位置(120 ):
mysql > show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 120 | test | |
+------------------+----------+--------------+------------------+
5、找到从服务器的配置文件,添加server-id
[mysqld]
server-id=2 #设置server-id,必须唯一
重启mysql
6、从数据库打开mysql命令行,执行以下命令
mysql > stop slave;
注意必须先关闭slave
mysql> change master to
-> master_host='192.168.84.128',
-> master_user='myuser',
-> master_password='mypassword',
-> master_log_file='mysql-bin.000004',
-> master_log_pos=120;
其中master_host,master_user,master_password,master_log_filemaster_log_pos分别为主数据库的IP,用于同步的账户和密码,二进制日志文件,日志的位置
mysql>start slave;
7、查看slave状态
mysql> show slave status\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了
8、另外
主数据库可以配置下面这些
# 不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
# 只同步哪些数据库,除此之外,其他不同步
binlog-do-db = test
查看数据库日志文件方法
mysqlbinlog /usr/local/mysql/data/mysql-bin.000004 > 4.txt #其中/usr/local/mysql/data/为数据库日志文件目录
4.txt文件将出现在/home目录
若从数据库版本为5.5的,主数据库是5.6的,出现下面错误
报错现象:
Last_IO_Errno: 1236
Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replication events with the checksum that master is configured to log; the first event 'mysql-bin.000004' at 4, the last event read from './mysql-bin.000004' at 120, the last byte read from '/usr/local/mysql/data/mysql-bin.000004' at 120.'
现象分析:这是不同版本间出现的checksum的问题,mysql5.6.5以后的版本中binlog_checksum=crc32,而低版本都是binlog_checksum=none。
解决方法:
在高版本上启动binlog_checksum=none,然后跳过现有的采用checksum的事件(当然也可以flush logs,然后指向binlog日志文件的最新位置)