mysql主从复制
问题思考?
速度:现在传统的JEE开发,很多时候只是考虑以实现功能为目的,很少去考虑架构的设计和调优。这就为后续的网站运营带来了很大问题,在小用户量的时候网站运行没什么太
大问题,一旦用户量逐步曾多就会导致网站面临‘崩溃’的风险,最糟糕的情况就是重构整个设计架构。因此在立项目前要合理系统的运行环境,从分考虑未来项目的并发和数据量做一个合理的预估。
安全:在满足需求的前提之下,再设计一个应用的时候还要考虑到安全,保证应用数据的安全。谈到安全目前互联网应用层出不穷,各种网络支付也如雨后春笋般涌现,因此交
易环节中的通讯安全,交易数据存储安全都是再设计中不容忽略的问题。
存储:在数据实现了高效访问,安全存储的前提下,如何解决日益增长数据的存储问题?很多时候业务随着线下或者线上推广,系统的使用用户群体日益增加,随之带来的是业
务数据的增长问题,单个数据库或者单个机器存储都会有一定的瓶颈,如何解决海量业务数据的存储问题,也变得不容忽略。
解决办法:
①速度提升:为了加速网站的访问速率对于网站的优化常见:1.页面静态化动静分离 2. 页面压缩 常见的gzip压缩 3.页面缓存也称为pageCache 4.考虑引进F5硬件负载均衡器或者nignx或者apache软负载均衡器 5.考虑面向服务化编程SOA设计系统 6.基于SOA服务集群 7.考虑介入全文搜索替代传统的数据库搜索 常用的用elasticsearch和solr 8.考虑在
DAO层做Cache 9.考虑对数据库经常查询不常变动的字段建立索引 10. 考虑读写分离。
②安全因素: 安全在系统开发时候,考虑的有两个方面1.通信安全2.数据安全;通信安全: 尽可能的使用加密技术对报文做加密或者尽可能的做内网通信。数据安全:保证数据的冗余备份做好灾备服务,同时避免像外界暴露 修改接口 (如果真的需要,这些接口的调用必须走权限)
③存储因素:面临海量数据传统型数据库已经力不从心或则在存储大数据上的维护成本很高并且查询性能也会慢慢的变慢。因此在面临海量数据的存储上需要慎重考虑数据的特点和实际的业务需求,及时的做好数据的归档和数据的选型,一般推荐尝试使用NoSQL结合DMDBS配合使用,当然可以考虑使用分库、分表配合 中间件(例如MyCat)对
RMDBS做二次设计。
总结:上面只是抛出了一些在日常开发中需要我们思考的问题,同时也给出了一点建议和意见,下面即将给大家搭建的是MySQL数据的主从环境的搭建,主要解决的是 1.数据的冗余备份(数据存储安全)2. 数据的读写分离 (提升数据库的响应性能)。
-
准备两台CentOS系统机器A、机器B,分别安装MySQL服务
[root@CentOSA ~]# yum install -y mysql-server
- 配置用户root
[root@CentOSA ~]# service mysqld start
[root@CentOSA ~]# mysqladmin -u root password 'root' - 远程登录授权
[root@CentOSA ~]# mysql -u root -proot
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;
mysql> use mysql;
mysql> delete from user where password =''; - 配置MySQL主从(机器A作为MySQL的主机(Master )、机器B作为MySQL的从机(Slave)),首先机器A(主机)配置
-
修改/etc/my.cnf文件
-
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=zpark
binlog-ignore-db=mysql
expire_logs_days=10
auto_increment_increment=2
auto_increment_offset=1
...
2.重启MySQL服务
[root@CentOSA ~]# service mysqld restart
3.登录MySQL查看主机状态
[root@CentOSA ~]# mysql -u root -proot
mysql> show master status\G;
************** 1. row **************
File: mysql-bin.000001
Position: 106
Binlog_Do_DB: zpark
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
ERROR:
No query specified
这里需要记录蓝色字体标注的值
5.机器B(从机)配置
1.修改/etc/my.cnf文件
[mysqld]
server-id=2
log-bin=mysql-bin
replicate-do-db=zpark
replicate-ignore-db=mysql
auto_increment_increment=2
auto_increment_offset=2
...
2.重启MySQL服务
[root@CentOSA ~]# service mysqld restart
3.登录MySQL配置从机查看状态
[root@CentOSA ~]# mysql -u root -proot
mysql> stop slave;
mysql>change master to master_host='192.168.145.130',master_user='root', master_password='root',master_log_file='mysql-bin.000001',master_log_pos
=106;
mysql> start slave;
mysql> show slave status\G;
************ 1. row ************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.145.130
Master_User: root
Master_Port: 3306
Connect_Retry: 60 Master_Log_File:
mysql-bin.000001 Read_Master_Log_Pos: 106
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: zpark
Replicate_Ignore_DB: mysql
......
注意蓝色字体标注的值和主库的值必须一致,在查看从机状态的时候如果处出现了红色字体的信息,说明MySQL的主从搭建成功了。
6.配置过程中遇到的问题
本人搭建过程中 Slave_IO_Running: No, Slave_IO_Running一直显示为NO;按照网上的排除 1.网络 2.权限 3.my.conf配置文件server-id重复 全部排除。之后查询mysql错误日志,日志位置在my.conf中配置 [mysqld_safe] log-error=/var/log/mysqld.log;打开日志发现记录的错误信息;
Initialzation of the server's UUID failed because it could not be read from the auto.cnf file. If this is a new server, the initialization failed because it was not possible to generate a new UUID.
本人在虚拟机中搞得linux系统,从系统是直接克隆的,导致mysql的server_uuid相同导致的;找到auto.cnf配置文件删除,重启mysql服务会自动生成新的auto.cnf文件;(不知道auto.conf文件在哪可以用find / -name auto.cnf 命令搜索)