- 主库:
1.授权复制账号使用的用户REPLICATION SLAVE权限:
GRANT REPLICATION SLAVE ON *.* to 'slaver'@'192.168.0.203' identified by 'cpf123456'
2.修改数据库配置文件my.cnf,开启binlog,并设置server-id的值
[mysqld]
log-bin=mysql-bin # 在mysql安装目录的data中可以看到二进制文件
server-id=1 # 主控设置为1
修改完成需要重启MySQL服务才能生效,重新启动:
(1).mysqladmin -u root -p shutdown(关闭)
(2).mysqld_safe -u mysql &(重启)
或者:
service mysqld restart
3.在主库上,设置读锁定有效,这个操作是为了确保没有数据库操作,以便获得一个一致性的快照;
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.05 sec)
4.查看当前主服务器信息(二进制日志名和偏移量值,目的是为了在从数据库启动以后,从这个点开始进行数据的恢复)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
5.备份主数据库的数据到从数据库,mysqldump 或者其他方法,如果著数据库服务可以停止,可以直接复制data文件夹,这种方式复制很快
6.数据备份完毕后,恢复写操作,剩下的操作只需在从库上执行
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
- 从数据库
1.修改从数据库的配置文件my.cnf,添加server-id参数。该参数必须唯一,不能和主数据库相同,如果有多个从库,每个从库必须有自己唯一的server-id
[mysqld]
server-id=2
2.重启时使用–skip-slave-start选项启动从数据库,这样不会立即启动从数据库服务上的复制进程,方便我们对从数据库进行进一步的配置
重新启动 1.mysqladmin -u root -p shutdown(关闭) 2.mysqld_safe --skip-slave-start &(重启)
3.对从库进行相应设置
参数说明:
MASTER_HOST:主库IP
MASTER_PORT:主库端口
MASTER_USER:主库复制使用的用户 ,主库第1步设置的
MASTER_PASSWORD:复制用户密码,主库第1步设置的
MASTER_LOG_FILE:开始执行复制的日志文件
MASTER_LOG_POS:开始执行复制的日志位置
mysql> CHANGE MASTER TO
->MASTER_HOST='192.168.0.238',
->MASTER_PORT=3306,
->MASTER_USER='slaver',
->MASTER_PASSWORD='cpf123456',
->MASTER_LOG_FILE='mysql-bin.000001',
->MASTER_LOG_POS=120;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
4.启动slave线程
mysql> start slave (停止是stop slave)
Query OK, 0 rows affected (0.00 sec)
5.状态查询:
mysql> show processlist\G
*************************** 1. row ***************************
Id: 1
User: root
Host: localhost
db: NULL
Command: Query
Time: 0
State: init
Info: show processlist
*************************** 2. row ***************************
Id: 2
User: sys