系统:Ubuntu14.04(阿里云/腾讯云)
数据库:MySQL5.6
主:阿里云ubuntu
从:腾讯云ubuntu
默认需要同步的数据库已经事先创建。
我们设置一个主库(Master),和一个从库(Slave或Secondary)。从库从主库复制数据内容,目的为灾难备份、读写分离等。
主库开启binary log,开启后每一次操作更新、修改、删除等都会记录在案,所以从库的同步过程其实就是获得这些过程,然后将现场还原,就达到了数据同步的目的。
PS:使用mysql的root用户和远程是很危险的,而且最后WITH GRANT OPTION还能授权,这里只是示范。最安全肯定是ssh登录再去访问数据库,又或者新建一个mysql用户专门用于同步。
上面的语句完成后,就可以用:
用户名为:root
密码为:123456(这个设置的密码不是原来ssh登录进去的密码,当然你也可以设置成一样的吧)
shell> mysql -u root -h xx.xx.xx.xx -pshell> 123456查看用户是否可以通过网络访问
root@iZwz96uh8912ewgq9yv5nxZ:~# mysql -u root -pEnter passWord:Welcome to the MySQL monitor. Commands end with ; or /g.Your MySQL connection id is 101Server version: 5.6.33-0ubuntu0.14.04.1-log (Ubuntu)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '/h' for help. Type '/c' to clear the current input statement.mysql> use mysqlReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select user , host from user;+------------------+-------------------------+| user | host |+------------------+-------------------------+| root | % || root | 127.0.0.1 || root | ::1 || root | izwz96uh8912ewgq9yv5nxz || debian-sys-maint | localhost || root | localhost |+------------------+-------------------------+6 rows in set (0.01 sec)mysql> mysql -u root -puse mysqlselect user , host from user;看到有个%号说明那个用户可以任意host远程直接登录mysql了。
修改配置文件:
server-id = 1(服务id,这个需要每个不同)log_bin = /var/log/mysql/mysql-bin.log(这是主服务器,必须开启log_bin,这句就是开启了)binlog_format =mixed(混合比较好)binlog_do_db = master(需要同步的数据库,如果多个数据库,重复这个配置)binlog_ignore_db = mysql(排除不需要同步的数据库,如果多个数据库,重复这个配置)都是有默认的,去除前面的#号就行了,binlog_format=mixed这句是没有的,自己加。
重启mysql,让配置生效:
sudo service mysql restart得到当前binlog信息:
mysql> show master status;+------------------+----------+--------------+------------------+--------------- ----+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_ Set |+------------------+----------+--------------+------------------+--------------- ----+| mysql-bin.000003 | 232 | master | mysql | |+------------------+----------+--------------+------------------+--------------- ----+1 row in set (0.03 sec)我们关注File(mysql-bin.000003)和Position(232),这两个状态是我们需要同步需要用到的,此时不要动数据库了,不管是增删改查都会改变Posituion。
你这里看到Binlog_Do_DB是叫做master,是因为我数据库名就叫master,其他名字也可以的,看你具体创建。
首先检查能不能远程主数据库:
shell> mysql -u root -h xx.xx.xx.xx -pshell> (输入密码123456,因为我们主服务其授权的时候的密码是123456)编辑mysql配置文件:
cd /etc/mysqlcp my.cnf mycnf.baknano my.cnf修改配置文件:
server-id = 2(服务id,这个需要每个不同)log_bin = /var/log/mysql/mysql-bin.log(这是主服务器,必须开启log_bin,这句就是开启了)binlog_format =mixed(混合比较好)binlog_do_db = master(需要同步的数据库,如果多个数据库,重复这个配置)binlog_ignore_db = mysql(排除不需要同步的数据库,如果多个数据库,重复这个配置)重启mysql服务:
sudo service mysql restart让主服务器同步数据到从服务器
mysql> stop slave;mysql> change master to master_host='xx.xx.xx.xx', master_user='root',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=232;(保证是最新的position)mysql> start slave;查看从数据库信息:
show slave status;此时你看到
Slave_IO_Running | Slave_SQL_Running| Yes | Yes就说明配置成功了。
这时你总算可以去操作主数据库了。
这时你创建一个表插入数据你可以看到从数据库也改变了。
参考文章:配置MySQL主从复制
新闻热点
疑难解答