准备装有mysql的两台服务器
IP
分别为:
xxx.xxx.xxx.1 (主)
xxx.xxx.xxx.2 (从)
授权
- 将这两台IP授权,允许其它IP通过账号密码进行访问(添加账号为
test
,密码为12345
) - 分别登录两台服务器,进入
mysql
,输入:
- mysql> Grant all privileges on *.* to 'test'@'%' identified by '123456' with grant option;
- mysql> Flush privileges;
上述代码的意思是创建一个test用户,host=%,允许所有IP通过用户名test进行访问。添加完刷新权限。
此时两台机子的mysql应该是可以相互访问的,如果不可以,导致的原因有很多,最常见的是防火墙没关,或者是安全组没有放通3306端口(从)
主数据库配置
- 登录主服务器,进入
mysql
的配置文件/etc/mysql/mysql.conf.d/mysqld.cnf
,在[mysqld]
下面添加:
- server-id=1
- log-bin=master-bin
- log-bin-index=master-bin.index
- 重启服务(这个是
ubuntu
的重启方式之一):
- $ /etc/init.d/mysql restart
- 进入
mysql
,查看主服务器mysql master
状态:
- 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]
下面添加:
- server-id=10
- log-bin=master-bin
- log-bin-index=master-bin.index
server-id
可以是其他,但是不能与主服务器上的一样
从数据库连接主服务
- 在从服务器中,登录数据库,输入:
- 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
- 启动:
- mysql> start slave;
- Query OK, 0 rows affected (0.01 sec)
- 查看状态:
- mysql> show slave status\G
显示的内容一定有这个情况才算配置正常:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
测试
- 在主数据库上创建一个
test_zhucong
的数据库,创建一个test
表
可以看到,从数据库也相应的有了这个数据库以及表
注意
做主从复制时,首先确定两台服务器的mysql没任何自定义库(否则只可以配置完后之前的东西没法同步,或者两个库都有完全相同的库应该也是可以同步,图中主数据库有些数据库在从的里面没有,就是因为主从设置之前,创建了)
server_id
必须配置不一样
本文作者为olei,转载请注明。
你好,各位