1.实战图解
2.主从同步的条件:
①server-id不同
②主库开启bin-log日志,从库开不开不影响
③主库建立同步的账号
④锁表,查看binlog文件以及位置点
⑤新开窗口导出全备份
⑥主库解锁,开放用户写入
从库:
①从库操作,把主库的全备份导入从库
②找位置点,配置master.info
③开启从库开关
3.环境说明:三个数据库服务器部署在一台服务器上的多实例
[root@oldboy scripts]# netstat -lntup|grep 330
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 26656/mysqld
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 21801/mysqld
tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 11749/mysqld
[root@oldboy scripts]#
4.登录数据库并授权用户(binlog日志检查是否开启/data/3306/my.cnf)
[root@oldboy ~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock
mysql> grant replication slave on *.* to rep@‘172.16.1.%‘ identified by ‘oldboy123‘;
mysql> flush privileges;
5.锁表查看binlog日志的位置
mysql> flush table with read lock; #锁表的时候不能退出
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000020 | 6162 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql>
6.全量备份数据库(切记要新开一个ssh窗口,锁表不可以退出)
[root@oldboy ~]# mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock -A -B -R --events --master-data=2|gzip >/server/backup/rep_bak_$(date +%F).sql.gz
[root@oldboy ~]# ll /server/backup/rep_bak_$(date +%F).sql.gz
-rw-r--r-- 1 root root 152180 6月 23 17:32 /server/backup/rep_bak_2016-06-23.sql.gz
[root@oldboy ~]#
7.主库解锁,开发用户写入
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql>
8.从库导入主库的全备份数据
[root@oldboy ~]# cd /server/backup/
[root@oldboy backup]# gzip -cd rep_bak_2016-06-23.sql.gz>rep_bak_2016-06-23.sql
[root@oldboy backup]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock <rep_bak_2016-06-23.sql
9.找位置点,配置master.info
mysql -uroot -poldboy123 -S /data/3307/mysql.sock
CHANGE MASTER TO
MASTER_HOST=‘172.16.1.52‘,
MASTER_PORT=3306,
MASTER_USER=‘rep‘,
MASTER_PASSWORD=‘oldboy123‘,
MASTER_LOG_FILE=‘mysql-bin.000020‘,
MASTER_LOG_POS=6162;
[root@oldboy data]# cat /data/3307/data/master.info #检查
10.开启从库开关
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql>
11.从库检查状态,是否正常
mysql> show slave status \G
Slave_IO_Running: Yes #出现这两个表示正常
Slave_SQL_Running: Yes #出现这两个表示正常读取多个文件并追加到一个文件
Seconds_Behind_Master: 0 #没有延迟
11.错误整理:
show slave status \G ;出现如下错误,
一般情况下 对于error错误就这么办
解决办法
stop slave ;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
start salve;
12.如果是想重新change master
如果是想重新 change master
步骤
①stop slave
②reset slave all
③change master
④start slave
13.快速部署主从复制
授权要在主服务器上做:
①直接锁表备份数据
mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock -x -A -B -R --events --master-data=2|gzip >/server/backup/rep_bak_$(date +%F).sql.gz
②解压全量备份数据
gzip -cd rep_bak_2016-06-25.sql.gz>rep_bak_2016-06-25.sql
③找出binlog日志的位置点
vim rep_bak_2016-06-25.sql
CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000021‘, MASTER_LOG_POS=396;
④恢复全备份数
mysql -uroot -poldboy123 -S /data/3307/mysql.sock < rep_bak_2016-06-25.sql
⑤登录数据库
mysql -uroot -poldboy123 -S /data/3307/mysql.sock
⑥第一次change master
CHANGE MASTER TO
MASTER_HOST=‘172.16.1.52‘,
MASTER_PORT=3306,
MASTER_USER=‘rep‘,
MASTER_PASSWORD=‘oldboy123‘;
⑦第二次change master #在全备份中取出
CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000021‘, MASTER_LOG_POS=396;
⑧开启slave
start slave
14数据库的线程介绍
15主从不同步解决思路
从库:
mysql> create database testskip;
主库:
mysql> create database testskip;
从库:
mysql> show slave status \G
Last_SQL_Error: Error ‘Can‘t create database ‘testskip‘; database exists‘ on query. Default database: ‘testskip‘. Query: ‘create database testskip‘
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
处理:
从库:
mysql> set global sql_slave_skip_counter=1;
mysql> show slave status \G #故障解决
本文出自 “小小三郎的博客” 博客,请务必保留此出处http://wsxxsl.blog.51cto.com/9085838/1792814
原文地址:http://wsxxsl.blog.51cto.com/9085838/1792814