两台MySQL服务器安装好MySQL-server、MySQL-Client软件包,并为数据库用户root修改密码;
主机192.168.4.10作为主库 Master
主机192.168.4.20作为从库 Slave
步骤一:初始化现有库
Master(192.168.4.10)
备份
mysqldump -uroot -p -all-databases > /root/mytest.sql
ls -lh /root/mytest.sql
重置日志
RESET MASTER;
quit
Slave(192.168.4.20)上导入备份的库
删除test库
drop database test;
quit
使用scp工具下载备份文件:
scp /root/mytest.sql [email protected]:/
验证下载结果
ls -lh mytest.sql
导入
mysql -u root -p < /mytest.sql
show databases;
步骤二:配置MySQL Master(主服务器,192.168.4.10)
修改/etc/my.cnf配置 重启mysql服务程序
vim /etc/my.cnf
添加
log_bin=dbsvrl-bin // 启动binlog日志,并制定文件名
server_id=10 //指定服务器ID号
重启mysql服务
systemctl restart mysqld.service
新建一个备份用户,授予复制权限需要的权限为REPLICATION SLAVE,允许其从Slave服务器访问:
GRANT REPLICATION SLAVE ON *.* TO ‘tedu’@‘192.168.4.%’ IDENTIFIED BY ‘123456’;
#可能会出现错误
#ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
#解决方法
#1、查看 mysql 初始的密码策略,
#输入语句 “ SHOW VARIABLES LIKE 'validate_password%'; ” 进行查看,
#2、首先需要设置密码的验证强度等级,设置
#set global validate_password_policy=LOW;
#3、全局参数为 6 即可
#输入设值语句 “ set global validate_password_length=6; ” 进行设值,
检查Master服务器同步状态
在已经初始化现有库的情况下,查看MASTER状态,记录下当前的日志文件名、偏移的位置
(下面SLAVE发起复制时需要用到):
show master status\G
步骤三:配置MySQL Slave(从服务器,192.168.4.20)
修改/etc/my.cnf配置,重新启动MySQL服务程序
指定服务器ID号、允许日志同步:
vim /etc/my.cnf
log_bin=dbsvr2-bin // 启动binlog日志,并制定文件名
server_id=20 //指定服务器ID号,
在生产环境中,还可以根据需要设置更详细的同步选项。比如,指定当主、从网络中断时的重
试超时时间(slave-net-timeout=60 )等,具体可参考MySQL手册。
配置完成后,重启mysql服务:
systemctl restart mysqld.service
通过CHANGE MASTER语句指定MASTER服务器的IP地址、同步用户名/密码、起始日志文
件、偏移位置(参考MASTER上的状态输出):
stop slave; 停止复制
CHANGE MASTER TO MASTER_HOST=‘192.168.4.10’,
MASTER_USER=‘tedu’,
MASTER_PASSWORD=‘123456’,
MASTER_LOG_FILE=‘tedu-bin.000002’, /对应Master
MASTER_LOG_POS=154; //对应Master
start slave;启动
head /var/lib/mysql/master.info 查看
show slave status\G
Slave_IO_Running: Yes //io线程已运行
Slave_SQL_Running: Yes // sql线程已运行
查看
vim /etc/sysconfig/selinux
SELINUX=disabled
关闭防火墙
setenforce 0
iptables -F
步骤四:测试主从同步效果
在Master上操作数据库、表、表记录
新建newdb库、newtable表,随意插入几条表记录:
在Slave上确认自动同步的结果
直接切换到newdb库,并查询newtable表的记录,应该与Master上的一样,这才说明主从同
步已经成功生效:
在Master服务器上可查看Slave主机的信息
show slave hosts;
#########################################
数据库的备份
备份所有库
mysqldump -uroot -p --all-databases > allsb.sql(路径/表名.sql)
恢复
mysql -u root -p < allsb.sql
备份单个库user
mysqldump -uroot -p -B mysql user > mysql+user.sql