MySQL主从数据库同步大致教程
主从数据库
mysql主从复制原理:
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。
mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。
每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,
它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。
然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
1、修改主服务器master:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[必须]启用二进制日志
server-id=1 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
2、修改从服务器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin //[不是必须]启用二进制日志
server-id=226 //[必须]服务器唯一ID,默认是1,一般取IP最后一段
3、重启数据库
service mysqld restart
4、创建用户
xxxx
5、登录主服务器的mysql,查询master的状态
mysql>show master status;
MySQL [mysql]> show master status;
+——————+———-+————–+——————+——————-+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+——————+———-+————–+——————+——————-+
| mysql-bin.000020 | 82373 | | | |
+——————+———-+————–+——————+——————-+
1 row in set (0.00 sec)
6、配置从服务器Slave:
Mysql>change master to master_host=’xxxx’,master_user=’xxxx’,master_password=’xxxxx1′,master_log_file=’mysql-bin.000020′,master_log_pos=14141889; //注意不要断开,308数字前后无单引号。
Mysql>flush privileges;
Mysql>start slave; //启动从服务器复制功能
7、查看
Mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: xxx //主服务器地址
Master_User: xxxxx //授权帐户名,尽量避免使用root
Master_Port: 3306 //数据库端口,部分版本没有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置,大于等于Exec_Master_Log_Pos
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes //此状态必须YES
Slave_SQL_Running: Yes //此状态必须YES
……
注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。
主从服务器配置完成。
—————
错误
2017-06-19 06:37:28 2209 [Warning] ‘proxies_priv’ entry ‘@ root@centos-512mb-ams3-02’ ignored in –skip-name-resolve mode.
2017-06-19 06:37:28 2209 [Warning] Neither –relay-log nor –relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use ‘–relay-log=mysql-relay-bin’ to avoid this problem.
2017-06-19 06:37:28 2209 [Warning] Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the ‘START SLAVE Syntax’ in the MySQL Manual for more information.
2017-06-19 06:37:28 2209 [Warning] Slave SQL: If a crash happens this configuration does not guarantee that the relay log info will be consistent, Error_code: 0
2017-06-19 06:37:28 2209 [Note] Slave SQL thread initialized, starting replication in log ‘mysql-bin.000020’ at position 82373, relay log ‘./mysql-relay-bin.000002’ position: 283
2017-06-19 06:37:28 2209 [ERROR] Slave SQL: Error ‘Table ‘ba.tc_options’ doesn’t exist’ on query. Default database: ‘ba’. Query: ‘INSERT INTO `tc_options` (`name`, `value`) VALUES (‘cron_sign_again’,’a:2:{s:3:”num”;i:0;s:6:”lastdo”;s:10:”2017-06-18″;}’) ON DUPLICATE KEY UPDATE `value` = ‘a:2:{s:3:”num”;i:0;s:6:”lastdo”;s:10:”2017-06-18″;}”, Error_code: 1146
1、锁定主服务器数据库
mysql> flush tables with read lock;
2、 导出全部数据库
mysqldump -uroot -pxxxx -A > all_database.mysql
3、从服务器停止slave,情况配置
mysql> stop slave; reset slave;
4、导入数据库
mysql -uroot -pxxxx < all_database.mysql
5、解锁主服务器数据库mysql> unlock tables;
6、从数据库查看
show slave status\G