扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
==========================================================
一:MySQL主从复制规划
==========================================================
二:检查环境
(1)检查MySQL数据库多实例是否启动
(2)开启MySQL主库的Binlog功能
grep log-bin /data/3306/my.cnf(3)设置server-id,此处ID不可以相同否则最后出现IO错误
grep server-id /data/{3306,3307,3308}/my.cnf/data/3306/my.cnf:server-id = 1/data/3307/my.cnf:server-id = 3/data/3308/my.cnf:server-id = 8==========================================================
三:因为从库现在还没有数据,或者数据不统一我们需要导入数据
==========================================================
四:主库上面的操作(3306)
(1)主库需要授权slave访问的用户rep
提示:replication slave 为mysql同步的必须权限,此处不要授权all权限
(2)锁表、查看binlog文件及位置点,主库导出全备,需要锁表(-x –master-date=2)
(3)将MySQL主库的数据进行备份
mkdir /server/backup/ -pmysqldump -uroot -poldboy123 -S /data/3306/mysql.sock -A -B --events|gzip >/server/backup/rep3307_bak$(date +%F).sql.gz #由于之前导入的数据库为全量的所以以前的密码为oldboy123ls -lrt /server/backup/(4)解锁MySQL数据库的数据表,并查看msater的状态
unlock table; #解锁MySQL数据库的数据表show master status;提示:如果解锁之后还是mysql-bin.000004 说明是正确的,如果动了说明没有锁住表
提示:如果mysqldump 加了-F 他就会更改刷新binlog
五:从库1上面的操作(3307)
提示:一定要确保从库的server_id与从库的不同
(1)把主库的备份数据导入到从库
cd /server/backup/gzip -d rep3307_bak2016-07-29.sql.gzmysql -uroot -poldboy -S /data/3307/mysql.sock提示从库的密码为oldboy
(2)登录从库检查主库1查看数据是否导入成功
(3)刷新用户的权限
flush privileges;(4)查找位置点,配置master.info,以下为主库的位置点
show master status; (主数据库执行此命令)| mysql-bin.000004 | 600457 | | |CHANGE MASTER TO MASTER_HOST='172.16.1.52', #这是主库的IP(域名也可以需要做解析)MASTER_PORT=3306, #主库的端口,从库端口和主库不可以相同MASTER_USER='rep', #这是主库上创建用来复制的用户repMASTER_PASSWORD='123456' #rep的密码MASTER_LOG_FILE='mysql-bin.000025', #这里是show master status时看到的查询二进制日志文件名称,这里不能多空格MASTER_LOG_POS=9155; #这里是show master status时看到的二进制日志偏移量,不能多空格提示:3307操作此步:会在/data/3307/data下面产生master.info文件
(5)登录3307从库,配置复制参数,去掉上述语句中的注释,执行如下
提示:3307操作此步:会在/data/3307/data下面产生master.info文件
ll /data/3307/data/master.info(6)上述步骤成功后,开启从库复制开关。
start slave;show slave status\G #G后面一定不要加封号,会报错的(7)主从是否成功,最关键的为下面的3项状态参数
mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show slave status\G"|egrep "IO_Running|SQL_Running|_Behind_Master"Slave_IO_Running: Yes #这个是I/O线程状态,状态为Yes表示I/O线程工作正常Slave_SQL_Running: Yes #这个是SQL线程状态,状态为Yes表示I/O线程工作正常Seconds_Behind_Master: 0 #这是个复制过程中,从库比主库的延迟的秒数(8)测试主库与从库是否同步
1.在主库添加一个新的数据库chris
2.检查从库是否有chris这个数据库
mysql> show databases;| chris |删除主库的chirs数据库检查从库是否删除
drop database chris; (主库执行)mysql> show databases; (从库执行)==========================================================
六:从库2上的操作(3308)快速配置
思路:因为我们已经有了一个MySQL从库,所以只需将3307的从库复制到3308即可
(1)从主库中导出数据库,导入从库
(2)将数据导入从库3308
cd /server/backup/gzip -d rep3308_bak2016-07-29.sql.gzmysql -uroot -poldboy -S /data/3308/mysql.sock < ./rep3308_bak2016-07-29.sql(3)检查3308数据库是否生成master.info文件
ll /data/3308/data/master.info(4)登录3308从库,配置复制参数
mysql -uroot -poldboy -S /data/3308/mysql.sockCHANGE MASTER TO MASTER_HOST='172.16.1.52',MASTER_PORT=3306,MASTER_USER='rep',MASTER_PASSWORD='oldboy123';(5)上述步骤成功后,开启从库复制开关。
start slave;show slave status\G #G后面一定不要加封号,会报错的(6)主从是否成功,最关键的为下面的3项状态参数
mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show slave status\G"|egrep "IO_Running|SQL_Running|_Behind_Master"Slave_IO_Running: Yes #这个是I/O线程状态,状态为Yes表示I/O线程工作正常Slave_SQL_Running: Yes #这个是SQL线程状态,状态为Yes表示I/O线程工作正常Seconds_Behind_Master: 0 #这是个复制过程中,从库比主库的延迟的秒数==========================================================
七:当我们使用show slave status\G查看主从复制出现故障时,可以看情况跳过
(1)临时停止同步开关
(2)将同步指针向下移动一个,如果多次不同步可以重复操作
set global sql_slave_skip_counter =1;(3)开启同步开关
start slave;(4)查看同步信息是否正常
show slave status\G==========================================================
八:测试主库与从库是否可以实现同步
(1)在主库上创建一个数据库
create database liyajin;(主库执行)(2)查看从库1,从库2是否有同步过来
show databases; (从库1执行)| liyajin |show databases; (从库2执行)| liyajin |(3)将主库中的liyajin数据库删除,
mysql> drop database liyajin; (主库执行)(4)查看从库是否也会删除
show databases; (从库1执行)show databases; (从库2执行)(5)最后查看从库的同步状态是否有错误,如果没有错误则MySQL主从复制配置成功
show slave status\G提示:一般删除数据库都会有提示同步错误,我们需要设置忽略错误即可
九:现在我们来将配置好的MySQL数据库打包成RPM包
依赖包:ncurses-devel libaio-devel cmake将LAMP环境进行RPM打包
(1):设置打包完成后执行的脚本
mkdir /server/scripts/ -pvim /server/scripts/mysql-init.sh#!/bin/bashuseradd -u 505 mysql -s /sbin/nologin -Mchown -R mysql.mysql /data//data/3306/mysql start/data/3307/mysql start/data/3308/mysql start\cp /application/mysql/bin/* /usr/local/sbin/cat >>/etc/rc.local<(3):LAP一键RPM包打包(打包以前要关闭数据库)
/data/3306/mysql stop/data/3307/mysql stop/data/3308/mysql stopfpm -s dir -t rpm -n mysqld -v 1.0 --description '3306,3307,3308' -d 'ncurses-devel libaio-devel cmake' --post-install /server/scripts/mysql-init.sh /application /usr/local/lib/ /usr/local/bin/ /data/总结:
三个实例数据库密码都是oldboy123
(4)将制作完成的RPM上传到服务器上安装即可
(5)安装完成以后的检查80与3306端口是否打开
ll /application/netstat -ltnp(2)配置YUM客户端-客户端配置
cd /etc/yum.repos.d/rm -f /etc/yum.repos.d/{CentOS-Base.repo,epel.repo}mv CentOS-Base.repo CentOS-Base.repo.bakcat >/etc/yum.repos.d/etiantian.repo<另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流