一、环境
1.windows、mysql5.5
2.本地安装多个mysql
二、主从备份的原理
1.binlog文件:开启binlog,主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中。
2.从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中。
3.然后从服务器的SQL线程会根据中继日志中的内容执行SQL语句。
三、同步初态
1、将主服务器要同步的数据库加锁,避免同步时发生改变:
>use database_name;
>flush tables with read lock;
2、使用mysqldump工具导出数据:
mysqldump -uroot -pxxx database_name >database_name.sql
3、备份完成后,解锁数据库:
>unlock tables;
4、将初始数据导入从数据库:
>create database database_name;
>use database_name;
>source database_name.sql;
四、主从同步设置
1、开启主服务器binlog,/数据库1目录/my.ini文件
server-id=1 #设置主服务器serverid
log-bin=mysql-bin #开启binlog
log-bin-index=master-bin.index
重启mysql服务
2、查看主服务器日记记录位置:
>show master status\G
显示内容如下:
*************************** 1. row ***************************
File: mysql-bin.000002 #从服务器用到
Position: 107 #从服务器用到
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)
3.配置从服务器,/数据库2目录/my.ini文件
log-bin=mysql-bin #开启二进制日志
server-id = 2 #主数据库id为1,不能相同。
replicate_wild_do_table=test.% #只同步test库下的表
relay_log=mysqld-relay-bin #记录中继日志
log-slave-updates=YES #从服务器同步后记录日志
重启mysql2服务
4.主服务器创建允许从服务器同步数据的账户
>grant replication slave on *.* to 'user_name'@'127.0.0.1'
identified by 'password'; #用户名,密码自定义,ip是主服务器ip
>flush privileges; #刷新系统权限表
5.从服务器开启同步
>change master to
master_host='127.0.0.1', #主服务器ip
master_port=3306, #主服务器端口
master_user='user_name', #允许从服务器访问的用户名
master_password='password', #用户名密码
master_log_file='mysql-bin.000002', #主服务器binlog名
master_log_pos=654; #主服务器log位置
配置完以上后,重启从服务器mysql服务。
6.查看从服务器是否已经成功开启同步
>show slave status\G
显示如下:
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: slave0
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 2059
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 1658
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table: test.%
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 2059
Relay_Log_Space: 1815
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
Slave_IO_Running和Slave_SQL_Running的状态都是YES,说明同步开启成功。
现在就可以去主服务器上的test库下创建表开测试同步了。