一、主从复制概念
影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。
在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。
日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log。【注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】
日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。
可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。
【即便不考虑什么网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B只能从relay log中读一条,执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。】
二、解决问题
数据如何不被丢失
备份
读写分离
数据库负载均衡
高可用
三、主从复制原理
依赖于二进制日志,binary-log.
二进制日志中记录引起数据库发生改变的语句
Insert 、delete、update、create table
主机所有写的数据都会生成二进制SQL日志执行文件,从机只需要将SQL日志执行文件获取到,然后进行数据同步即可
四、MySQL环境搭建(一主一从相同操作)
MySQL-master:192.168.33.135
MySQL-slave:192.168.33.136
1、 连接到虚拟机,在/usr/local下新建一个文件夹为mysql,将tar包上传到此目录当中
2、切换到/usr/local/mysql目录,进行拆包 tar -xvf MySQL-5.5.44-1.linux2.6.x86_64.rpm-bundle.tar
3、 安装mysql客户端
rpm -ivh MySQL-client-5.5.44-1.linux2.6.x86_64.rpm 此命令会报错
rpm -ivh MySQL-client-5.5.44-1.linux2.6.x86_64.rpm --nodeps
4、 安装服务端 rpm -ivh MySQL-server-5.5.44-1.linux2.6.x86_64.rpm --nodeps
安装服务端,如果当前虚拟机有mysql报错,出现版本冲突 yum remove mysql-libs 然后重新安装服务端
5、 检测是否安装客户端和服务器 rpm -qa|grep -i mysql
6、 启动mysql服务 service mysql start
停止服务:service mysql stop
重启服务:service mysql restart
7、 mysql默认安装完毕后是没有密码的 更改密码mysqladmin -uroot -p password '新密码'
8、 登陆mysql服务器 mysql -uroot -p
9、 SQLyog去连接虚拟机mysql
连接报1130错误,没有权限进行远程连接,更改权限为%
①登陆mysql服务器
②切换到mysql数据库下 use mysql;
③查询当前用户表中用户名和host信息,select user,host from user;
发现host为127.0.0.1代表只能本机使用root ,外界用不了
④更改权限,将host改为% update user set host='%' where user='root';
如果报ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY’ 不用理会
⑤再次查看 权限已更改 select user,host from user;
⑥刷新权限 flush privileges;
⑦退出客户端,重启mysql service mysql restart
⑧使用SQLyog去连接
五、搭建主从复制
1、 配置节点信息
找到my.cnf配置文件,rpm方式安装在/etc下没有该文件,mysql默认启动的时候会加载/usr/share/mysql/my-medium.cnf,只需要将这个文件复制到/etc下改名为my.cnf即可
2、配置主节点
①执行 cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
②编辑 vi /etc/my.cnf文件
server-id = 保证唯一,建议配置成ip地址第四位
log-bin=mysql-bin 为了让主机生成二进制SQL日志执行文件
③重启mysql服务器 service mysql restart
④查看当前server-id是否生效,使用sqlyog工具查看,如果返回值为0或者1代表是默认的 SHOW VARIABLES LIKE 'server_id'
⑤查看当前主服务器状态,如果看到的不是null代表成功~ SHOW MASTER STATUS
3、配置从节点
①执行 cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
②编辑 vi /etc/my.cnf文件
server-id = 22
log-bin=mysql-bin
binlog_do_db=test
③重启mysql服务器 service mysql restart
④查看当前server-id是否生效,使用sqlyog工具查看,如果返回值为0或者1代表是默认的 SHOW VARIABLES LIKE 'server_id'
4、设置服务器读取权限
主服务器创建一个账号,将账号分配从服务器,从服务器拿到该账号然后才可以执行同步数据操作
GRANT REPLICATION SLAVE ON *.* TO 'zheng'@'%' IDENTIFIED BY 'zheng';
5、 从服务器执行同步
从服务器执行同步操作,使用主服务器生成的权限账号,将二进制文件同步
①设置同步
根据主服务器ip地址,生成的权限账号的用户名和密码以及二进制文件名称还有文件大小进行同步
CHANGE MASTER TO MASTER_HOST='192.168.33.135',MASTER_USER='zheng',MASTER_PASSWORD='zheng',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=241;
②开启同步 START SLAVE
6、 mysql环境卸载
rpm -qa|grep -i mysql 查看安装情况
卸载命令:
rpm -e MySQL-server-版本号
rpm -e MySQL-client-版本号
查找mysql目录:find / -name mysql
删除 rm -rf xxx/mysql