Fork me on GitHub

mysql数据库主从复制

准备装有mysql的两台服务器
IP分别为:

  • xxx.xxx.xxx.1 (主)
  • xxx.xxx.xxx.2 (从)

授权

  • 将这两台IP授权,允许其它IP通过账号密码进行访问(添加账号为test,密码为12345
  • 分别登录两台服务器,进入mysql,输入:
1
2
mysql> Grant all privileges on *.* to 'test'@'%' identified by '123456' with grant option;
mysql> Flush privileges;

注意:

  1. 上述代码的意思是创建一个test用户,host=%,允许所有IP通过用户名test进行访问。添加完刷新权限。
  2. 此时两台机子的mysql应该是可以相互访问的,如果不可以,导致的原因有很多,最常见的是防火墙没关,或者是安全组没有放通3306端口

主数据库配置

  • 登录主服务器,进入mysql的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]下面添加:
1
2
3
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
  • 重启服务(这个是ubuntu的重启方式之一):
1
$ /etc/init.d/mysql restart
  • 进入mysql,查看主服务器mysql master状态:
1
2
3
4
5
6
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 245 | | |
+-------------------+----------+--------------+------------------+

日志File为master-bin.000001,Position为245(这个得记下来,设置从服务的要用)

从数据库配置

  • 登录从服务器,进入mysql的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]下面添加:
1
2
3
server-id=10
log-bin=master-bin
log-bin-index=master-bin.index

server-id可以是其他,但是不能与主服务器上的一样

从数据库连接主服务

  • 在从服务器中,登录数据库,输入:
1
2
3
4
5
6
7
mysql> change master to
-> master_host = 'xxx.xxx.xxx.1',
-> master_user='test',
-> master_password='12345',
-> master_log_file='master-bin.000001',
-> master_log_pos= 245;
Query OK, 0 rows affected, 2 warnings (0.13 sec)

启动slave

  • 启动:
1
2
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
  • 查看状态:
1
mysql> show slave status\G

显示的内容一定有这个情况才算配置正常:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试

  • 在主数据库上创建一个test_zhucong的数据库,创建一个test


可以看到,从数据库也相应的有了这个数据库以及表

注意

  1. 做主从复制时,首先确定两台服务器的mysql没任何自定义库(否则只可以配置完后之前的东西没法同步,或者两个库都有完全相同的库应该也是可以同步,图中主数据库有些数据库在从的里面没有,就是因为主从设置之前,创建了)
  2. server_id必须配置不一样
禹都一只猫,热爱IT,支持原创