折腾了花一天才搞完,但是这个真的好简单。步骤完全正确的情况下配置MySQL的主从复制不到几分钟就搞定了,不自黑了,赶紧记下笔记先;
1.首先 确保两台服务器的MySQL版本必须一致,不然有的操作5.7支持,5.3不支持这种就尴尬了,同步肯定会出错的
2.在主服务器(Master)添加一个账号供从服务器(Slave)使用
create user username@'ip段' identified by 'password' ; eg:ip段表示指定访问Master的Slave主机ip 设为'%'表示任何一台服务器都可以连接
对账号进行授权
grant replication slave on *.* to 'username'@'IP段';
3.对Master和Slave进行配置
主服务器:
vi /etc/my.cnf //MySQL路径自己找
在[mysqld] 下面添加
log-bin = mysql-bin
server-id = 1 //server-id一定是唯一的,
#bind-address=127.0.0.1 //这个选项表示只允许本地访问,屏蔽掉
从服务器:
log-bin = mysql-bin
server-id = 2
read_only = 1 //设为只读的 可以不加
4.数据同步,先确保两个服务器的数据库一样
在Master命令行
mysqldump -uroot -p --single-transaction --master-data --triggers --routines --all-databases > /backup/all.sql //导出所有的数据,-single-transaction保证事务一致性
在Slave命令行
scp uname@server:/backup/all.sql /var/dumpsql/ //scp把远程服务器上的文件复制到当前服务器上面
然后存放导入Slave里面
mysql -u root -p < /var/dumpsql/all.sql //输入密码 搞定,手动同步了
5.
Master 查看状态
mysql> show master status;
最好reset一下master 让mysql-bin回到出事状态000001;
mysql>reset master;
Slave 配置复制链路
mysql>change master to master_host='Masterip',master_user='username',master_password='password',master_log_file='mysql-bin.000007',master_log_pos=3026;
mysql>start slave; //启动从服务器
mysql>show slave status\G; //查看slave服务器状态
如果显示no的话
mysql>stop slave;
mysql>set global sql_slave_skip_counter=1;
mysql>start slave;
mysql>show slave status\G; //再试试就可以了
关键点:
1.添加slave账号
2.设置两台服务器的server-id
3.mysqldump同步数据
4.配置复制链路,启动slave
可能遇到的错误
① 添加slave账号时报:ERROR 1396 (HY000): Operation CREATE USER failed for ‘test’@’%’
解决:表示已有这个账号存在,使用
mysql>select user from mysql.user where host='%';
mysql>delete from user where user='username';//删掉对应的账号
mysql>drop user username@'IP段';
mysql>flush privileges;//刷新,重新创建 搞定ok