一、服务器规划
首先我们需要两台服务器,一台作Master服务器,一台作Slave服务器。
我这里的服务器为基于VMWare的两台虚拟机,操作系统为:CentOS 6.5。具体规划如下:
二、安装数据库
Master和Slave服务器都需要安装MySQL数据库,具体安装步骤请参见博文《MySQL之——CentOS6.5 编译安装MySQL5.6.16》,我就不在这里重复了。
三、主从配置
MySQL5.6开始主从复制有两种方式:基于日志(binlog);基于GTID(全局事务标示符)。这里我们以基于日志(binlog)的方式为例。另外,MySQL官方也给出了MySQL Replication相关的教程,链接为http://dev.mysql.com/doc/refman/5.6/en/replication.html 建议大家阅读下。
1、修改主数据库配置文件
输入命令
vim /etc/my.cnf
[mysqld] server-id=1 log-bin=/data/mysql3306log/mysql-bin sync_binlog=1 binlog_format=mixed #注意:下面这个参数需要修改为服务器内存的70%左右 innodb_buffer_pool_size = 512M innodb_flush_log_at_trx_commit=1 sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO lower_case_table_names=1 log_bin_trust_function_creators=1
修改之后要重启mysql:
service mysqld restart
2、修改从数据库的的配置文件
server-id配置为大于1的数字即可
vim /etc/my.cnf
[mysqld] server-id=2 log-bin=/data/mysql3306log/mysql-bin binlog_format=mixed relay-log=/data/mysql3306log/slave-relay-bin relay-log-index=/data/mysql3306log/slave-relay-bin.index sync_binlog=1 #注意:下面这个参数需要修改为服务器内存的70%左右 innodb_buffer_pool_size = 512M innodb_flush_log_at_trx_commit=1 sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO lower_case_table_names=1 log_bin_trust_function_creators=1
修改之后要重启mysql:
service mysqld restart
3、SSH登录到主数据库
(1)在主数据库上创建用于主从复制的账户(192.168.0.153换成你的从数据库IP):
首先登陆MySQL服务器
mysql -uroot -proot
然后在MySQL服务器中执行如下命令:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'lyz'@'192.168.0.153' IDENTIFIED BY 'lyz';
(2)主数据库锁表(禁止再插入数据以获取主数据库的的二进制日志坐标):
mysql> FLUSH TABLES WITH READ LOCK;
(3)然后克隆一个SSH会话窗口,在这个窗口打开MySQL命令行:
首先登陆MySQL服务器
mysql -uroot -proot
执行如下命令
mysql> SHOW MASTER STATUS;
结果为:
mysql> show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 329 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
退出MySQL
mysql> exit;
在这个例子中,二进制日志文件是mysql-bin.000001,位置是329,记录下这两个值,稍后要用到。
(4)在Master服务器上使用mysqldump命令创建一个数据快照:
#mysqldump -uroot -proot -h127.0.0.1 -P3306 --all-databases --triggers --routines --events >all.sql
# 接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导出完成。
(5)解锁第(2)步主数据的锁表操作:
mysql> UNLOCK TABLES;
(6)将第(4)步生成的all.sql复制到Slave服务器
scp ./all.sql liuyazhuang153:/data/mysql/backup
4、SSH登录到从数据库
(1)导入主数据库的快照
# cd /data/mysql/backup # mysql -uroot -proot -h127.0.0.1 -P3306 < all.sql
接下来会提示你输入mysql数据库的root密码,输入完成后,如果当前数据库不大,很快就能导入完成。
(2)给从数据库设置复制的主数据库信息(注意修改MASTER_LOG_FILE和MASTER_LOG_POS的值):
# mysql -uroot -proot mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.152',MASTER_USER='lyz',MASTER_PASSWORD='lyz',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=329; # 然后启动从数据库的复制线程: mysql> START slave; # 接着查询数据库的slave状态: mysql> SHOW slave STATUS \G # 如果下面两个参数都是Yes,则说明主从配置成功! Slave_IO_Running: Yes Slave_SQL_Running: Yes
(3)至此,MySQL主从复制配置结束。接下来你可以在主数据库上创建数据库、表、插入数据,然后看从数据库是否同步了这些操作
四、主从同步简单管理
1. 停止MYSQL同步
STOP SLAVE IO_THREAD; #停止IO进程 STOP SLAVE SQL_THREAD; #停止SQL进程 STOP SLAVE; #停止IO和SQL进程
2. 启动MYSQL同步
START SLAVE IO_THREAD; #启动IO进程 START SLAVE SQL_THREAD; #启动SQL进程 START SLAVE; #启动IO和SQL进程
3. 重置MYSQL同步
RESET SLAVE; 清除主从同步参数,它会删除master.info和relay-log.info文件,以及所有的中继日志,并启动一个新的中继日志。 适用重新再次配置一次从库的情况。
4. 查看MYSQL同步状
SHOW SLAVE STATUS;
5. 临时跳过MYSQL同步错误
确保数据一致的情况下临时的跳过这个错误操作如下,有可能要多次。 STOP SLAVE; SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
# vi /etc/my.cnf [mysqld] #slave-skip-errors=1062,1053,1146 #跳过指定error no类型的错误 #slave-skip-errors=all #跳过所有错误 这里出现一次1146报错,是因为配置binlog-do-db过滤