注意事项
1、主从服务器操作系统版本和位数一致。
2、MySQL版本一致。
服务器配置
master:192.168.1.120
slave:192.168.1.119
Master(192.168.1.120)服务器配置
vim /etc/my.cnf
[mysqld]
# 唯一的服务辨识号,数值位于 1 到 2^32-1之间.
# 此值在master和slave上都需要设置.
# 如果 “master-host” 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.
server-id=1
# 打开二进制日志功能.
# 在复制(replication)配置中,作为 MASTER 主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
log-bin=master-bin
log-bin-index=master-bin.index
#需要备份的数据库
binlog-do-db=orders
#不需要备份的数据库
#若没有配置binlog-do-db和binlog_ignore_db,表示备份全部数据库。
binlog-ignore-db=mysql
2、重启mysqld服务
service mysqld restart
3、为从MySQL创建用户
#登录
mysql -uroot -p
Enter password:
#创建用户
mysql> create user 'slave'@'192.168.1.119(从机ip)' identified by '1';
#配置主从复制权限
mysql> grant replication slave on *.* to 'slave'@'192.168.1.119(从机ip)' identified by '1';
4、若orders中已有数据,还需要锁定主服务器数据库,然后将数据导入到从数据库
#锁定
mysql> flush tables with read lock;
#数据复制到从数据库后,查看主数据库master状态并解锁:
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000004 | 648 | orders | mysql |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql> unlock tables;
Slave(192.168.1.119)服务器配置
1、配置服务ID
vim /etc/my.cnf
[mysqld]
#server_id是必须的,而且唯一
server-id=2
# 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程能够修改数据.
# 你可以使用此项去保证没有应用程序会意外的修改slave而不是master上的数据
#read_only
# 如果你在使用链式从服务器结构的复制模式 (A->B->C),
# 需要打开slave的二进制日志
#log_bin=mysql-bin
# 如果你在使用链式从服务器结构的复制模式 (A->B->C),
# 你需要在服务器B上打开此项.
# 此选项打开在从线程上重做过的更新的日志, 并将其写入从服务器的二进制日志.
# 如果打开log_bin,却没有设置log_slave_updates,这是一种错误的配置。
#log_slave_updates
2、重启MySQL服务
3、复制配置
#登录
mysql -uroot -p
Enter password:
#执行
mysql> change master to master_host='192.168.1.120',
master_user='slave',
master_password='1',
master_port=3306,
master_log_file='master-bin.000004',
master_log_pos=648,
master_connect_retry=10;
参数详解:
master_host:主服务器的IP。
master_user:配置主服务器时建立的用户名
master_password:用户密码
master_port:主服务器mysql端口,如果未曾修改,默认即可。
master_log_file:日志文件名称,填写查看master状态时显示的File
master_log_pos:日志位置,填写查看master状态时显示的Position
master_connect_retry:重连次数
4、启动进程
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.120
Master_User: slave
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: master-bin.000004
Read_Master_Log_Pos: 648
Relay_Log_File: magic-VirtualBox-relay-bin.000003
Relay_Log_Pos: 507
Relay_Master_Log_File: master-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
若Slave_IO_Running和Slave_SQL_Running均为Yes,则表示配置成功。
5、中间遇到了一些问题,解决如下
Slave_IO_Running: No
Slave_SQL_Running: No
Last_Errno: 1146
Last_Error: Error 'Table 'orders.user_orders' doesn't exist' on query. Default database: 'orders'. Query: 'INSERT INTO `orders`.`user_orders` (`id`, `user_id`, `user_name`) VALUES (NULL, '2', 'magic.shen')'
# 首先停止主从同步,
# stop slave;
# 检查 master status,中 Position 是否和配置的一致
# 手动将master上的orders库结构、数据导入到slave上
# 重启slave
# start slave;