linux日常服务部署平时练习的少,所以抽时间自己写一写自己搭建服务 过程
以下是笔记以及总结:
Mysql主从(Mysql Reolication),主要用于mysql的实时备份或者读写分离。在配置前先做好准备工作,配置2台mysql服务器,一台做master,一台做slave。
mysql主从的原理其实就是:在每个从尽可以设置一个主,主在实行sql后,记录二进制log文件,从连接上主,并从主获得binlog,存于本地relay-log,并从上次记住的位置起,执行sql。一旦遇到错误则停止同步。
因此可以有这些推论:主从之间 数据不是实时同步的,就算网络连接正常,也存在瞬间,主从数据 不一致。如果主从网络断开,会从网络正常后,批量同步。如果对从进行数据修改,那么很可能从在执行主的bin-log时出现了错误而停止同步,这个是很危险 操作。所以一般情况下,要非常小心的修改从上的数据。
那么有一个衍生的配置是双主,互为主从配置,只要双方修改不冲突,可以工作良好。如果需要多主 话,可以使用环形配置,这样任意一个节点 修改都可以同步到所有节点。可以应用在读写分离的场景中,用于降低单台mysql服务器的io。可以实现mysql服务的HA集群,可以是1主多从,也可以hi互相主从(主主)
首先现在2台机器上分别安装mysql
一台为mysql master :192.168.186.130
一台为mysql slave : 192.168.186.132
主机上端口号设置为
[mysqld]
port = 3306
从机上的端口号设置为
port =3307
先在主机上创建一个库
进入mysql
create database db1;
然后退出导出数据给db1
mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql
mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql
配置主机(master)
vim /etc/my.cnf
添加修改
server-id=1
log-bin=mysql-bin
binlog-do-db=db1
(两个可选参数 2 选 1:
binlog-do-db=db1,db2 #用来指定需要同步的库
binlog-ignore-db=db1,db2 #指定忽略不同步的库)
设置按成后,重启mysql
然后授权一个用户,在从机上用来向主机进同步
> grant replication slave on *.* to 'repl'@'192.168.186.132' identified by 'lxx123456';
> flush tables with read lock;
> show master status; #一定要记住前两列的内容,后面会用到
设置从机的配置
vim /etc/my.cnf
修改相应的server-id =2 (不能 和主机一样)
log-bin=mysql-bin
如果主机上配置了指定数据库参数的话,这里就不必配置了
重启mysql
拷贝主的数据库db1到从上来
mysqldump -S /tmp/mysql.sock db1 > 123.sql;
mysql -uroot -S /tmp/mysql.sock -e "create database db1";
mysql -S /tmp/mysql.sock db1 < db1.sql;
登陆从的mysql
执行以下命令
> slave stop;
> change master to master_host='192.168.186.130', master_port=3306, master_user='repl',
master_password='lxx123456', master_log_file='mysql-bin.000002', master_log_pos=106;
> slave start;
然后到主上执行
# mysql -e "unlock tables";
在从上查看状态
> show slave status\G;
看是否有如下显示
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
只有两个同时为 YES,才算正常。
建议: MySQL 主从机制比较脆弱,谨慎操作。如果重启 master,务必要先把 slave 停掉,
也就是说需要在 slave 上去执行 slave stop 命令,然后再去重启 master 的 mysql 服务,否则
很有可能就会中断了。当然重启完后,还需要把 slave 给开启 slave start。
这里特别注意一下,如果修改过my.cnf文件后,再执行slave同步的话,会出现错误:
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
原因:
该服务器之前做过主从复制,中途修改过my.cnf配置文件,重启mysql之后,binlog文件名和relay-log文件名已经改变,所以不能再从之前的relay-log复制了.
解决办法
mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)
本文出自 “熊仔的博客” 博客,转载请与作者联系!