mysql 5.6.22 主从同步复制备份
参考:http://369369.blog.51cto.com/319630/790921/
http://www.2cto.com/database/201312/269034.html
http://yhv5.com/mysql_master-slave_799.html
1、主从服务器分别作以下操作:
1.1、版本一致,如我用的mysql5.6.22;
1.2、安装(我们是编译源码安装的)完成后初始化表,并在后台启动mysql;
1.3、修改root的密码;
2、修改主服务器master:
#vim /usr/local/mysql/my.cnf
[mysqld]
log-bin=mysql-bin #开启二进制日志
server_id=1 #[必须]服务器唯一ID,默认是1,一般取IP最后一段
binlog-ignore-db =test #不记录test库,可以添加多个库则写多行
binlog-do-db =chzzg #记录chzzg库
log-slave-updates =1 #这个参数一定要加上,否则不会给更新的记录些到二进制文件里
slave-skip-errors =1062 #这个跳过1062 主键重复错误
skip-external-locking
skip-name-resolve
expire_logs_days =7 #日志保留7天
innodb_flush_log_at_trx_commit=1 #这也是Innodb 的默认设置。我们每次事务的结束都会 #触发Log Thread 将log buffer 中的数据
sync_binlog =1
binlog_cache_size =10M
binlog_format =mixed
3、修改从服务器slave:
#vim /usr/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=8 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
binlog-ignore-db =test
log-slave-updates =1
skip-external-locking
skip-name-resolve
expire_logs_days =7
innodb_flush_log_at_trx_commit=1
sync_binlog =1
max_binlog_size = 10M
binlog_cache_size = 5M
replicate-ignore-db =test
binlog_format =mixed
完成配置后重启两台服务器的mysql
4、在主服务器上建立帐户并授权slave:
命令登陆master机子:
# mysql -uroot -padmin //用户名命名登陆后就可以了。
mysql> GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by 'backup123'; //一般不用root用户,如果指定了 多台从机,则可以用 %,只有一台从机就指定 IP替换%。“%”表示所有客户端都可能连;
mysql> show master status; //登陆master机子的mysql查看master状态;并记录
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 120 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化
5、配置从服务器Slave:
登陆slave机的mysql:命令同上:mysql -u用户名 -p密码
mysql> change master to
master_host='172.168.32.6', //此处都是内网地址。
master_user='backup', //master授权的用户名
master_password='backup123', //master授权的用户密码
master_port=3306,
master_log_file='mysql-bin.000004', //master的文件名称File
master_log_pos=120; //master的文件位置Positon
完成后。
Mysql>start slave; //启动从服务器复制功能
6、检查从服务器复制功能状态:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.168.32.6
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 120
Relay_Log_File: i-588F1134-relay-bin.000002
Relay_Log_Pos: 894
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB: test
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 731
Relay_Log_Space: 1072
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
Master_UUID: 29296c3f-849a-11e4-a8de-d00de79d4b11
Master_Info_File: /usr/local/mysql/data/master.info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
1 row in set (0.00 sec)
上边看到: Slave_IO_Running: Yes
Slave_SQL_Running: Yes 两个表示成功,必须是2个Yes 才是成功, connecting 或者No都失败!
另外:
如果数据库已经有数据了,则需要将主库的数据导出,并上传到从库服务器上并导入;
主库导出样例:
[root@i-05963843 bin]# ./mysqldump -uroot -p12345 -h127.0.0.1 kyddb > /home/kyddb0914.sql
可以导出来,
也可以用:mysqldump -uroot -p --hex-blob --lock-all-tables -R --triggers --databases mydb --master-data=2 --default-character-set='utf8' --quick > /home/kyddb0914.sql
导入命令:
mysql -uwebsite -pfeixun@0927 --default-character-set=utf8 website < /home/kyddb0914.sql