天津市住房和城乡建设网站,网站开发公司更换,网络seo是什么工作,dw软件怎么用怎么做网页一直都没有写blog的习惯#xff0c;以前总觉得自己的脑子就是最好的记忆容器#xff0c;现在觉得我好像有个假脑子。当时是使用阿里云镜像#xff0c;安装了两台ECS#xff0c;结果配置MySQL的时候出现了UUID重复问题。先从配置主从开始吧#xff0c;值得记录。文中很多部…一直都没有写blog的习惯以前总觉得自己的脑子就是最好的记忆容器现在觉得我好像有个假脑子。当时是使用阿里云镜像安装了两台ECS结果配置MySQL的时候出现了UUID重复问题。先从配置主从开始吧值得记录。文中很多部分引用了网络上的零碎资料场景一般应用对数据库而言都是“读多写少”也就说对数据库读取数据的压力比较大有一个思路就是说采用数据库集群的方案基本的原理是让主数据库处理事务性查询而从数据库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中 的从数据库。 当然主服务器也可以提供查询服务。使用读写分离最大的作用无非是环境服务器压力读写分离的好处(资料)1.MySQL复制另外一大功能是增加冗余提高可用性当一台数据库服务器宕机后能通过调整另外一台从库来以最快的速度恢复服务因此不能光看性能也就是说1主1从也是可以的。2.多机器(集群)的处理能力3.对于读操作为主的应用使用读写分离是最好的场景因为可以确保写的服务器压力更小而读又可以接受点时间上的延迟。4.主从只负责各自的写和读极大程度的缓解X锁和S锁争用5.从库可配置myisam引擎提升查询性能以及节约系统开销6.从库同步主库的数据和主库直接写还是有区别的通过主库发送来的binlog恢复数据但是最重要区别在于主库向从库发送binlog是异步的从库恢复数据也是异步的7.读写分离适用与读远大于写的场景如果只有一台服务器当select很多时update和delete会被这些select访问中的数据堵塞等待select结束并发性能不高。 对于写和读比例相近的应用应该部署双主相互复制8.可以在从库启动是增加一些参数来提高其读的性能例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-writeALL。当然这些设置也是需要根据具体业务需求来定得不一定能用上9.分摊读取。假如我们有1主3从不考虑上述1中提到的从库单方面设置假设现在1 分钟内有10条写入150条读取。那么1主3从相当于共计40条写入而读取总数没变因此平均下来每台服务器承担了10条写入和50条读取(主库不 承担读取操作)。因此虽然写入没变但是读取大大分摊了提高了系统性能。另外当读取被分摊后又间接提高了写入的性能。所以总体性能提高了说白 了就是拿机器和带宽换性能。MySQL官方文档中有相关演算公式官方文档 见6.9FAQ之“MySQL复制能够何时和多大程度提高系统性能”###原理MySQL主(称master)从(称slave)复制的原理master将数据改变记录到二进制日志(binary log)中,也即是配置文件log-bin指定的文件(这些记录叫做二进制日志事件binary log events)slave将master的binary log events拷贝到它的中继日志(relay log)slave重做中继日志中的事件,将改变反映它自己的数据(数据重演)###注意主DB server和从DB server数据库的版本一致主DB server和从DB server数据库数据一致这里就会可以把主的备份在从上还原也可以直接将主的数据目录拷贝到从的相应数据目录主DB server开启二进制日志,主DB server和从DB server的server_id及auto.cnf中的UUID都必须唯一###操作1、主从服务器分别作以下操作1.1、版本一致1.2、初始化表并在后台启动mysql1.3、修改root的密码2、修改主服务器Master的MySQL配置文件$ vi /etc/my.cnf(默认)[mysqld]log-binmysql-bin //[必须]启用二进制日志server-id93 //[必须]服务器唯一ID默认是1一般取IP最后一段# 指定同步的数据库 如果 不指定则同步全部数据库binlog-do-db testdb3、修改从服务器slave$ vi /etc/my.cnf[mysqld]server-id211 //[必须]服务器唯一ID默认是1一般取IP最后一段4、重启两台服务器的MySQL$ /etc/init.d/mysql restart或$ service mysqld restart5、在主服务器上建立帐户并授权slave:$ /usr/local/mysql/bin/mysql -uroot -p 或直接 mysql -u root -pmysqlGRANT REPLICATION SLAVE ON *.* to slave% identified by 123456;mysqlflush privileges;//一般不用root帐号%表示所有客户端都可能连只要帐号、密码正确此处可用具体客户端IP代替如192.168.145.226加强安全。6、登录主服务器的MySQL查询Master的状态mysqlshow master status\G;-------------------------------------------------| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |-------------------------------------------------| mysql-bin.000004 | 308 | | |-------------------------------------------------1 row in set (0.00 sec)注执行完此步骤后不要再操作主服务器MYSQL防止主服务器状态值变化7、配置从服务器Slavemysqlchange master to master_host192.168.145.222,master_userslave,master_password123456,master_log_filemysql-bin.000004,master_log_pos308;//注意不要断开308数字前后无单引号。Mysqlstart slave; //启动从服务器复制功能8、检查从服务器(Slave)复制功能状态mysql show slave status\G*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.2.222 //主服务器地址Master_User: slave //授权帐户名尽量避免使用rootMaster_Port: 3306 //数据库端口部分版本没有此行Connect_Retry: 60Master_Log_File: mysql-bin.000004Read_Master_Log_Pos: 600 //#同步读取二进制日志的位置大于等于Exec_Master_Log_PosRelay_Log_File: ddte-relay-bin.000003Relay_Log_Pos: 251Relay_Master_Log_File: mysql-bin.000004Slave_IO_Running: Yes //此状态必须YESSlave_SQL_Running: Yes //此状态必须YES......注Slave_IO及Slave_SQL进程必须正常运行即YES状态否则都是错误的状态(如其中一个NO均属错误)。以上操作过程主从服务器配置完成。10、监控据说可以编写一shell脚本用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程)如发现只有一个或零个yes就表明主从有问题了。###问题配置mysql主从时由于是阿里云镜像系统盘拷贝的MySQL目录导致主从MySQL UUID相同 Slave_IO无法启动报错信息如下The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.解决办法:mysqlshow variables like %log_error%;//查看配置的日志地址查看日志修改MySQL data 目录下auto.cnf 文件中uuid的值使两台MySQL不同即可$ find / -name auto.cnf 或 find / -name auto.cnf修改后重启MySQL服务。