mysql主从复制(单向同步)

0、环境

系统:ubuntu14.04(阿里云\腾讯云)

数据库:mysql5.6

主:阿里云ubuntu

从:腾讯云ubuntu

默认需要同步的数据库已经事先创建。

1、原理

我们设置一个主库(Master),和一个从库(Slave或Secondary)。从库从主库复制数据内容,目的为灾难备份、读写分离等。

主库开启binary log,开启后每一次操作更新、修改、删除等都会记录在案,所以从库的同步过程其实就是获得这些过程,然后将现场还原,就达到了数据同步的目的。

2、开启mysql远程连接

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

PS:使用mysql的root用户和远程是很危险的,而且最后WITH GRANT OPTION还能授权,这里只是示范。最安全肯定是ssh登录再去访问数据库,又或者新建一个mysql用户专门用于同步。

上面的语句完成后,就可以用:

用户名为:root

密码为:123456(这个设置的密码不是原来ssh登录进去的密码,当然你也可以设置成一样的吧)

shell> mysql -u root -h xx.xx.xx.xx -p
shell> 123456

查看用户是否可以通过网络访问


root@iZwz96uh8912ewgq9yv5nxZ:~# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 101
Server 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 its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> 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 -p
use mysql
select user , host from user;

看到有个%号说明那个用户可以任意host远程直接登录mysql了。

最后还有一个要注意的地方,将/etc/mysql/my.conf(或者/etc/mysql/mysql.conf.d/mysqld.cnf)的配置文件的bind-address行注释掉,又或者改成bind-address = 0.0.0.0

3、配置主服务器

cd /etc/mysql
cp my.cnf mycnf.bak
nano my.cnf

修改配置文件:

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,其他名字也可以的,看你具体创建。

4、配置从服务器

首先检查能不能远程主数据库:

shell> mysql -u root -h xx.xx.xx.xx -p
shell> (输入密码123456,因为我们主服务其授权的时候的密码是123456) 

编辑mysql配置文件:

cd /etc/mysql
cp my.cnf mycnf.bak
nano 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主从复制

你可能感兴趣的:(数据库)