centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课
搭建主从过程中先要slave stop 搭建好之后再slave start避免出错
ntsysv:图形界面服务管理工具
chkconfig:命令行服务管理工具
setup命令:图形界面管理工具
上半节课
ntsysv
chkconfig
setup命令
配置MySQL 主从
下半节课
子shell
MySQL备份
kill命令
pid文件
discuz!论坛数据库读写分离
双主搭建
mysql.history
1. MySQL主从原理以及应用场景MySQL的Replication原理非常简单,总结一下:
每个从仅可以设置一个主。
主在执行sql之后,记录二进制log文件(bin-log)。
从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。
从这几条Replication原理来看,可以有这些推论:
主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。
如果主从的网络断开,从会在网络正常后,批量同步。
如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。
一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。
如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。
可以应用在读写分离的场景中,用以降低单台MySQL服务器的I/O
可以实现MySQL服务的HA集群
可以是1主多从,也可以是相互主从(主主)
说明: 以下文档为在同一个机器上,配置两个mysql服务,在我们上课的时候,会用两台单独的机器来演示,但步骤基本上一样。
2. 安装、配置MySQL
参考之前步骤搭建MySQL服务
为了做实验方便,我们在同一台机器上配置两个MySQL服务(跑两个端口)
cd /usr/local/; cp -r mysql mysql_2; cd mysql_2;
初始化mysql2: ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql2
拷贝配置文件:cp /etc/my.cnf ./my.cnf
修改配置文件相关参数:vim my.cnf #更改port 以及 socket
启动:/usr/local/mysql_2/bin/mysqld_safe --defaults-file=/usr/local/mysql_2/my.cnf --user=mysql &
若开机启动它,需加入到 /etc/rc.local中
3. 配置主从准备工作
设定mysql_2 为主端口3307,mysql为从端口为3306
在主上创建测试库: create database db1;
然后导出主的mysql库数据然后导入给db1
mysqldump -uroot -S /tmp/mysql2.sock mysql > 123.sql ;
mysql -uroot -S /tmp/mysql2.sock db1 < 123.sql
yum install -y openssh-clients //两边都要安装
yum install -y rsync
cd /data/mysql
rsync -av blog root@192.168.21.112:/data/mysql/ //blog是一个目录
或者
rsync -av root@192.168.21.112:/data/mysql/blog /data/mysql/ //blog是一个目录
4. 配置主(master)
vim /usr/local/mysql_2/my.cnf #修改或添加:
server-id=1
log-bin=mysql-bin
两个可选参数(2选1):
binlog-do-db=db1,db2 #需要同步的库
binlog-ignore-db=db1,db2 #忽略不同步的库
修改配置文件后,重启mysql_2
pid=`ps uax |grep mysql2.sock |grep -v grep |awk '{print $2}'` ; kill $pid; cd /usr/local/mysql_2/bin/; ./mysqld_safe --defaults-file=../my.cnf --user=mysql &
设置root密码:mysqladmin -u root -S /tmp/mysql2.sock password '123456'
mysql -u root -S /tmp/mysql2.sock -p'123456'
grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123123';
flush tables with read lock;
show master status; #一定要记住前两列的内容,一会会用到
5. 设置从(slave)
vim /etc/my.cnf #修改或增加
server-id = 2 #这个数值不能和主一样
可选参数:replicate-do-db=db1,db2 和 replicate-ignore-db=db1,db2 #意义同主的那两个可选参数 这个不用配置 因为主已经配置了
service mysqld restart
拷贝主的db1库数据到从:mysqldump -uroot -S /tmp/mysql2.sock -p123456 db1 > db1.sql; mysql -uroot -p -e "create database db1"; mysql -uroot -p db1 < db1.sql
mysql -uroot -p #登陆从的mysql
slave stop;
change master to master_host='127.0.0.1', master_port=3307, master_user='repl', master_password='123123', master_log_file='mysql-bin.000006', master_log_pos=474952;
slave start;
主上: mysql -uroot -S /tmp/mysql2.sock -p123456 -e "unlock tables"
从上查看从的状态: show slave status\G;
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.
#查看当前所在库
select database(); create database www; use www;
#复制 粘贴
show create table aming.pre_forum_post\G; #可以看到www库下新建的表pre_forum_post
show tables;
扩展学习:
mysql主从心得整理 http://wangwei007.blog.51cto.com/68019/965575
mysql主从问题集 http://blog.chinaunix.net/uid-8786588-id-3771613.html
mysql主从延迟 http://f.dataguru.cn/thread-461916-1-1.html
主从延迟原因PPT http://meeting.zhdba.com/style/2012atcc/ppt/mysql-arc.ppsx
mysql 主主 http://luoweiro.blog.51cto.com/2186161/658550
mysql-proxy 实现读写分离 http://my.oschina.net/barter/blog/93354
atlas相关 http://www.oschina.net/p/atlas
mysql一主多从 http://blog.sina.com.cn/s/blog_4c197d4201017qjs.html
cobar实现分库分表 http://blog.csdn.net/huoyunshen88/article/details/37927553
mysql分库分表方案 http://my.oschina.net/ydsakyclguozi/blog/199498
mysql架构演变 http://www.aminglinux.com/bbs/thread-8025-1-1.html
子shell
hostname slave ,改主机名,然后执行bash命令,就可以看到新的主机名[root@slave ~]
MySQL备份
myisam引擎可以直接拷贝文件夹/目录过去别的机器的mysql数据目录下,重启mysql就可以看到数据库
但是innodb不能这样做,一定要通过mysqldump 加single-transaction或者xtrabackup
Windows下没有xtrabackup工具,所以Windows下只能用myisam引擎,xcopy定时拷贝文件夹
或者停机,然后xcopy拷贝innodb引擎的数据库,然后重新打开mysql服务
kill命令
killall mysqld:不是强制杀mysql 如果是同一机器多实例mysql 会杀死全部mysql实例
kill -9 pid:强制杀mysql
pkill command:不是强制杀mysql
pkill 对应的是COMMAND
pid文件
改了hostname之后,主机名变了,mysql的data目录下(主机名.pid)变了和(主机名的.err)变了,导致mysql启动不起来
原因:因为pid文件需要实现touch,但是因为主机名变了,mysql找不到pid文件,所以需要touch或者cp原来的pid文件
解决方法:将aminglinux.pid cp一下,cp aminglinux.pid slave.pid,然后restart mysql
discuz!论坛数据库读写分离
discuz!论坛使用的是DAL类型的读写分离,主的ip和从的ip都写在discuz!论坛的配置文件里面,程序代码会跟根据配置文件进行主从读写分离
双主搭建
双主产生死循环
避免双主产生死循环这种情况,在my.cnf里增加
两个主都要开binlog,在一台主上更新,另一台主会反映出更新,另一台主上的更新,在另一台主上也会反映出更新,反正无论哪边更新两边都可以反映更新,这就是双主
主上
auto-increment-increment = 2 //每次增长2
auto-increment-offset = 1 //设置自动增长的字段的偏移量,即初始值为1
从上
auto-increment-increment = 2 //每次增长2
auto-increment-offset = 2 //设置自动增长的字段的偏移量,即初始值为2注:二者都只有server-id不同和 auto-increment- offset不同
auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2。
搜索一下mysql.history,mysql执行过的命令
grep 'ss' mysql.history
f
centos MySQL主从配置 ntsysv chkconfig setup命令 配置MySQL 主从 子shell MySQL备份 kill命令 pid文件 discuz!论坛数据库读写分离 双主搭建 mysql.history 第二十九节课的更多相关文章
- 风炫安全web安全学习第二十九节课 CSRF防御措施
风炫安全web安全学习第二十九节课 CSRF防御措施 CSRF防御措施 增加token验证 对关键操作增加token验证,token值必须随机,每次都不一样 关于安全的会话管理(SESSION) 不要 ...
- php第二十九节课
文件 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...
- centos LAMP第一部分-环境搭建 Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课
centos LAMP第一部分-环境搭建 Linux软件删除方式,mysql安装,apache,PHP,apache和php结合,phpinfo页面,ldd命令 第十九节课 打命令之后可以输入: e ...
- centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课
centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/ind ...
- centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节课
centos lamp/lnmp阶段复习 以后搬迁discuz论坛不需要重新安装,只需修改配置文件即可 安装wordpress 安装phpmyadmin 定时备份mysql两种方法 第二十五节 ...
- 风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧
风炫安全WEB安全学习第二十六节课 XSS常见绕过防御技巧 XSS绕过-过滤-编码 核心思想 后台过滤了特殊字符,比如说
- 风炫安全WEB安全学习第二十五节课 利用XSS键盘记录
风炫安全WEB安全学习第二十五节课 利用XSS键盘记录 XSS键盘记录 同源策略是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源.所以xyz.com下的js脚本采用a ...
- 风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击
风炫安全WEB安全学习第二十四节课 利用XSS钓鱼攻击 XSS钓鱼攻击 HTTP Basic Authentication认证 大家在登录网站的时候,大部分时候是通过一个表单提交登录信息. 但是有时候 ...
- 风炫安全WEB安全学习第十九节课 XSS的漏洞基础知识和原理讲解
风炫安全WEB安全学习第十九节课 XSS的漏洞基础知识和原理讲解 跨站脚本攻击(Cross-site scripting,通常简称为XSS) 反射型XSS原理与演示 交互的数据不会存储在数据库里,一次 ...
随机推荐
- log4j配置 logging.xml (转载)
Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...
- 【转】如何读懂Oracle文档中的语法图
转自:http://blog.itpub.net/22990797/viewspace-750157/ Oracle文档中用到了两种表达语法的方法,语法图和BNF. BNF, Backus-Naur ...
- 【Graphlab】
https://dato.com/ graphlab
- MFC中控件添加了变量后修改
新增一个变量这个变量存在于两个位置,一个是头文件中项目名+Dlg.h文件,另一个是源文件中项目名+Dlg.cpp文件
- javascript测试框架 Mocha 实例教程
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html
- Oracle中给用户赋予debug权限
通过可视化工具(如PL/SQL Developer.Oracle SQL Developer)调试Oracle的存储过程时,如果遇到如下错误信息:...ORA-01031: insufficient ...
- 利用Sharepoint 创建轻量型应用之基本功能配置!
博客同步课程.假设你想跟着视频学习,请跟着例如以下视频: http://edu.csdn.net/course/detail/2097 1. 点击安装程序,出现的界面先期安装完毕准备工具,准备工具 ...
- Extjs 自定义控件
// JavaScript Document Ext.namespace('CRM.Panels'); CRM.Panels.UserDetail = Ext.extend(Ext.Panel,{ w ...
- Extjs学习笔记--(五,事件)
Extjs中事件包括浏览器事件(单机按钮,鼠标移动等触发)和内部事件(组件之间的联动) 绑定浏览器事件的过程Ext.EventManager 要为元素绑定事件,通常会使用EventManager.on ...
- mybatis 循环遍历
/****Service/ public ServiceMessage<MemberFreedomRepModel> getMFListByPay(Long memberId,Long f ...