设为首页 收藏本站
查看: 1269|回复: 0

[经验分享] mysql 主从配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-9-1 09:32:08 | 显示全部楼层 |阅读模式
1. MySQL主从原理以及应用场景MySQL的Replication原理非常简单,总结一下:
每个从仅可以设置一个主。
主在执行sql之后,记录二进制log文件(bin-log)。
从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。
从这几条Replication原理来看,可以有这些推论:
主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
如果主从的网络断开,从会在网络正常后,批量同步。
如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。
一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。
如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

可以应用在读写分离的场景中,用以降低单台MySQL服务器的I/O
可以实现MySQL服务的HA集群
可以是1主多从,也可以是相互主从(主主)

准备两台机器:
首先确保主从服务器上的Mysql版本相同(master)ip:192.168.1.107
(slave) ip:192.168.1.109

2. 安装、配置MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
cd /usr/local/src/
wget http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
注意:上面的地址是32位机器用的,如果你的机器是64位,下载这个包(http://syslab.comsenz.com/downloads/linux/mysql-5.1.40-linux-x86_64-icc-glibc23.tar.gz)安装方法是一样的。

tar zxvf /usr/local/src/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
mv mysql-5.1.40-linux-i686-icc-glibc23 /usr/local/mysql
useradd -s /sbin/nologin mysql
cd /usr/local/mysql
mkdir -p /data/mysql
chown -R mysql:mysql /data/mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
cp support-files/my-large.cnf /etc/my.cnf
cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld






vim /etc/init.d/mysqld
需要修改的地方有
basedir=/usr/local/mysql
datadir=/data/mysql

在master(192.168.1.107)创建测试库: create database db1;
然后导出主的mysql库数据然后导入给db1
mysqldump -uroot -S /tmp/mysql.sock mysql > 123.sql ;
mysql -uroot -S /tmp/mysql.sock db1 < 123.sql

4. 配置主(master)
vim /etc/my.cnf   #修改或添加:
server-id=1
log-bin=mysql-bin  
两个可选参数(2选1):
         binlog-do-db=db1,db2 #需要同步的库
         binlog-ignore-db=db1,db2 #忽略不同步的库
修改配置文件后,重启mysql

你可以把mysql加入到PAHT中
vim /etc/profile.d/path.sh
1
2
#!/bin/bash
PATH=$PATH:/usr/local/mysql/bin/



增加完后 source !$



新安装的mysql是没有密码的
启动mysql:mysql
设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如:GRANT ALL PRIVILEGES ON *.* TO 'real'@'192.168.1.109' IDENTIFIED BY '123.com' WITH GRANT OPTION;
flush privileges;


show databases;
你可以看到db1 这个库;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复
  
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 369
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.00 sec)

记住File Position 后面的参数;

注意在导出数据之前先对主数据库进行READ LOCK,以保证数据的一致性
  
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.19 sec)





5. 设置从(slave)
vim /etc/my.cnf  #修改或增加
server-id = 2 #这个数值不能和主一样
可选参数:replicate-do-db=db1,db2 和 replicate-ignore-db=db1,db2 #意义同主的那两个可选参数

拷贝主的db1库数据到从:
mysqldump -h192.168.1.107 -P3306 -uroot -p123.com db1> db1.sql;mysql -p -e  "create database db1"; mysql -uroot -p  db1 < db1.sql


启动 mysql:service mysqld start
如果 启动时你遇到了这样的错误:


Starting MySQL…… ERROR! Manager of pid-file quit without updating file
那么 你需要做这样的操作


vi /etc/my.cnf

log-bin=mysql-bin

binlog_format=mixed

注释掉这两行,然后重启



登陆从的mysql


slave stop;
change master to master_host='192.168.1.107', master_port=3306, master_user='real', master_password='123123', master_log_file='mysql-bin.000004', master_log_pos=369;
slave start;
主上: mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"
从上查看从的状态: show slave status\G;
1
2
Slave_IO_Running: Yes
Slave_SQL_Running: Yes



查看这两个是否为yes

6. 测试主从
主上清空db1库的db表 :use db1; select count(*) from db"; truncate table db;  
进入slave,查看db1库db表: use db1; select count(*) from db";  
主上删除表db: drop table db;
从上看db表不存在了
建议: MySQL主从机制比较脆弱,谨慎操作。如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-108197-1-1.html 上篇帖子: mysql的启动和关闭 下篇帖子: mysql5.5 多实例的安装 mysql
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表