Mysql主从复制
Mysql环境准备
#下载Mysql
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
如果报错: -bash: wget: 未找到命令
安装插件 yum -y install wget
安装mysql-community-release-el7-5.noarch.rpm
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
安装Mysql
sudo yum install mysql-server
一直y下去就可以了
配置Mysql
mysql -u root
报错。原因:原因是/var/lib/mysql的访问权限问题。
#授权
chown root /var/lib/mysql/
#重启
service mysqld restart
#再次登录并修改密码
mysql -u root
use mysql;
update user set password=password('123456') where user='root';
exit;
#再次重启,授权root可以远程连接
service mysqld restart
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "root";
service mysqld restart
Mysql主从复制原理
MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现。其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我在Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果。从库生成两个线程,一个1/0线程、一.个SQL线程。i/o线程去请求主库的binlog,并将得到的binlog日志写到relay log (中继日志)文件中。主库会生成一个log dump线程,用来给从库i/o线程传binlog;SQL线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致。
主从复制搭建
配置主节点
vi /etc/my.cnf
server_id=131 ###服务器id
log-bin=mysql-bin ###开启日志文件
#保存之后重启
service mysqld restart
#查询对应配置文件中的server_id 说明已经配置成功
show variables like '%server_id%';
#看到同步的文件,和行数 说明已经配置成功。
show master status;
从节点配置
vi /etc/my.cnf
server_id=132 ###从服务器server_id
log-bin=mysql-bin ###日志文件同步方式
binlog_do_db=test,test1 ###同步数据库,多个以逗号分隔
service mysqld restart
从节点同步主节点
master_host:主节点IP
master_user :主节点账号
master_password:密码
#这两个参数的配置是在主节点通过show master status;查询到的
master_log_file
master_log_pos
#执行sql
CHANGE MASTER TO master_host = '192.168.100.131',
master_user = 'root',
master_password = 'root',
master_log_file = 'mysql-bin.000001',
master_log_pos = 120;
因为从节点的服务器是直接复制的主节点,所有可能会出现一个错误
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.。是因为UUID重复了.删除子节点的auto.cnf就可以了
解决办法:
#找到Mysql的位置
cat /etc/my.cnf
cd /var/lib/mysql
rm -rf auto.cnf
service mysqld restart
#开始同步
start slave
#查看同步状态
SHOW SLAVE STATUS
效果演示
在主节点创建test数据库,在创建一个表,子节点会自动同步
刷新一下从节点