因为最近业务需求,需要建立一个数据仓库,为了避免主库受到影响,所以需要建立一个从库给数据仓库提供源数据。
目前2台机器都是 阿里云ECS云服务器, 所以两者通讯可以直接使用内网连接。
主库配置
修改主库配置文件 my.cnf :
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | [mysqld]# 数据库唯一id, 该id 必须和其他链接的数据库不同
 server-id= 1
 #启用二进制日志;
 log-bin=mysql-bin
 # 日志格式, 有Mixed,Statement,Row三种,默认格式是 Statement,Mixed相当于前两种模式的结合
 binlog_format=mixed
 # 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
 expire_logs_days = 10
 # 可以选择需要同步哪些库
 binlog-do-db=need_db
 
 | 
修改后, 保存,并重启数据库。
重启完成后,进入mysql,创建一个从库同步使用的帐号:
| 12
 3
 4
 
 | > mysql -uroot -p
 mysql> CREATE USER 'slave'@'172.18.18.2' IDENTIFIED BY '123456';
 mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
 
 | 
创建帐号时, 为了安全着想 最好指定host参数,我这里填写的是从库阿里云的内网地址。
锁表,避免这段时间有新的数据产生, 执行 show master status  记住Position
| 12
 3
 4
 5
 6
 7
 8
 
 | mysql> FLUSH TABLES WITH READ LOCK;mysql> show master status;
 +------------------+----------+--------------+------------------+-------------------+
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
 +------------------+----------+--------------+------------------+-------------------+
 | mysql-bin.000001 |  154     | need_db      |                  |                   |
 +------------------+----------+--------------+------------------+-------------------+
 1 row in set (0.00 sec)
 
 | 
从库配置
修改从库配置文件 my.cnf :
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | [mysqld]
 # 数据库唯一id, 该id 必须和其他链接的数据库不同
 server-id= 1
 #启用二进制日志;
 log-bin=mysql-bin
 # 日志格式, 有Mixed,Statement,Row三种,默认格式是 Statement,Mixed相当于前两种模式的结合
 binlog_format=mixed
 # 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
 expire_logs_days = 10
 # 可以选择需要同步哪些库
 replicate-do-db=need_db
 #如果发现主服务器断线,重新连接的时间差;
 master-connect-retry=60
 
 | 
保存并重启mysql服务。
重启完成后,进入mysql,开始配置主从链接
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | > mysql -uroot -p
 # 先停止slave服务
 mysql> slave stop;
 
 # 配置主从参数
 mysql> change master to master_host='172.18.18.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154, master_connect_retry=30;
 
 # 启动slave服务
 mysql> slave start;
 
 | 
参数解释:
| 12
 3
 4
 5
 6
 7
 
 | master_host: Master 的IP地址master_user: 在 Master 中授权的用于数据同步的用户
 master_password: 同步数据的用户的密码
 master_port: Master 的数据库的端口号
 master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
 master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
 master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。
 
 | 
然后回到主库,解锁表
回到从库查看状态:
| 1
 | mysql> show slave status \G;
 | 
如果 SlaveIORunning 和 SlaveSQLRunning 是Yes 说明已经正常工作了