搭建主从同步需要在两个电脑上分别安装 MySQL ,我这里安装的是 CentOS6.7 64位,MySQL-5.5.33。
MySQL 是二进制包安装的:http://aby028.blog.51cto.com/5371905/1892818
两台的操作是一样的,要求能够登陆 mysql 数据库即可。
主从地址如下:
master:192.168.133.128
slave:192.168.133.132
ifconfig eth0 | grep "inet addr" | awk '{print $2}' | cut -d: -f2
环境介绍:
cat /etc/redhat-release
uname -a
配置主库的 my.cnf 文件,为了方便操作过滤掉开头是 #,$ 的行
cat /etc/my.cnf | grep -v ^# | grep -v ^$ > tmp.log
cat tmp.log > /etc/my.cnf
编辑 /etc/my.cnf 文件
server-id = 1
log-bin=mysql-bin
#max_binlog_size=500M
#binlog-do-db=test
#binlog-ignore-db=test1
skip-name-resolve
lower_case_table_names=1
以上参数介绍:
server-id = 1 #表示服务器ID,可以自定义,在主从中是唯一的且必须为数字
log-bin=mysql-bin #表示启用mysql二进制日志,必须要启动,否则主从不会生效
#max_binlog_size=500M #表示每个binlog文件最大500M,但一条记录不会写在两个日志中,所以日志有时会超500M
#binlog-do-db=test #表示要同步的数据库名字,如果是多个数据库,在多加一行就可以
#binlog-ignore-db=test1 #表示不需要同步的数据库名字,如果是多个数据库,在多加一行就可以
skip-name-resolve #忽略主机名的方式访问
lower_case_table_names=1 #忽略数据库表名大小写
如果将 binlog-do-db=test ,binlog-ignore-db=test1 不写或是注释则表示为同步所有数据库,我这里就是同步所有数据库
修改过 my.cnf 文件后需要重启 mysql 服务
/etc/init.d/mysqld restart
登陆主库,并创建一个账号并授权,专门用于主从同步
创建账号之后别忘记刷新权限
grant replication slave on *.* to yuci@'%' identified by '123456';
flush privileges;
检查自己刚才的操作
select user,host from mysql.user;
show grants for yuci@'%';
进行锁表,锁表后将只能读取不能创建或插入任何信息
flush table with read lock;
查看 binlog 的文件名以及 pos 位置节点
show master status;
在从库上用刚才创建的用户登陆主库,测试两台数据库是否连接通常
mysql -uyuci -p123456 -h292.168.133.128
新开一个远程界面,连接主库并将导出数据库。(保证之前的 mysql 登陆界面不要退出)
在将新导出的 test.sql 文件通过 scp 传给从库
mysqldump -uroot -p123456 --events -A -B > /root/test.sql
scp test.sql root@192.168.133.132:/root
yes
回到主库,解锁
unlock tables;
在从库上将刚才的 test.sql 文件导入到数据库
mysql -uroot -p123456 < /root/test.sql
编辑从库上 my.cnf 文件,将 server-id 修改为 2
vim /etc/my.cnf
server-id = 2
修改了 my.cnf 文件,需要重启 mysql
/etc/init.d/mysqld restart
登陆 mysql 配置从库的同步参数
CHANGE MASTER TO
MASTER_HOST='192.168.133.128',
MASTER_PORT=3306,
MASTER_USER='yuci',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
以上参数配置
CHANGE MASTER TO
MASTER_HOST='192.168.133.128', #表示主库的IP
MASTER_PORT=3306, #表示主库的端口
MASTER_USER='yuci', #表示主库上允许同步的用户
MASTER_PASSWORD='123456', #表示同步用户的密码
MASTER_LOG_FILE='mysql-bin.000001', #表示从哪个binlog文件开始同步
MASTER_LOG_POS=107; #表示从binglong文件的哪个pos节点位置开始同步
在从库上执行 start slave 操作,IO连接
start slave;
查看当前的状态,关键有以下几个内容
show slave status\G;
关键查看以下参数
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes #主从之间的网络
Slave_SQL_Running: Yes #主从之间的数据
Seconds_Behind_Master: 0 #从库落后主库的秒数
在主库中创建一个数据库,测试主从是否同步
create database haha;
在主库中查看
show databases;
在从库中查看,主从同步成功
show databases;
zhao