mysql读写分离怎么写 如何实现mysql读写分离( 二 )


出错的原因是在主库中删除了用户信息,但是在从库中同步的时候失败导致同步停止 , 下面记录自己的操作(是在进入MySQL的操作且是从库) 。
在数据库中操作时 , 一定要注意当前所在的数据库是哪个,作为一个良好的实践:在SQL语句前加USE dbname。
Sharding-JDBC定位为轻量级Java框架,在Java的JDBC层提供的额外服务 。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
使用Sharding-JDBC可以在程序中轻松的实现数据库读写分离。
Sharding-JDBC具有以下几个特点:
下面我们将用ShardingJDBC在项目中实现MySQL的读写分离 。
在pom.xml文件中导入ShardingJDBC的依赖坐标
在application.yml中增加数据源的配置
这时我们就可以对我们项目中的配置进行一个测试,下面分别调用一个更新接口和一个查询接口,通过查看日志中记录的数据源来判断是否能够按照我们预料中的跑 。
搞定?。。〕绦蛘0凑瘴颐窃て诘某晒ε芷鹄戳?nbsp;, 成功借助ShardingJDBC在我们项目中实现了数据库的读写分离 。
mysql如何做读写分离啊 ?我刚给公司做完mysql的主从读写分离
先给你个思路
第一步:先做mysql的主从(Master/Slave Replication),实现数据同步
第二部:通过Amoeba来实现读写分离,也可以通过mysql proxy(比较麻烦) 。
ps:
我的环境是两台装windows server 2008 , 一台做主 , 一台做从 。
如果你需要的话,留下邮箱 , 我发给你一个我自己刚做好的文档 。照着做就可以了
mysql-proxy读写分离转发到后端从库 读取 。实现 主库负责--写入,从库负责--读取 。
注意:Proxy其实不是一台机器,只是一个连接方式 , 读取数据的时候自动从Salve上?。?写数据则自动向Master中写 。
实验前先做好 主从架构
主---192.168.1.252 (mysql-5.7 ,三台版本一致)
从---192.168.1.101
proxy---192.168.1.102
vim /etc/mysql-proxy.cnf
内容如下:
注意:(在服务器上配置文件要把注释都去掉,不然会报错 。)
保存退出 。赋予660权限 , 不然会报错 。
3.##修改读写配置文件
关闭可以用killall -9 mysql-proxy 或者kill -9 ID
在主执行:(事先做好主从架构,从库会自动吧这个操作更新过去,或者在手动去从库也执行一遍)
使用客户端去链接mysql-proxy(1.102)(开2个以上客户端链接)
接下来 , 测试数据 。(主从都开启时,先添加一条数据)
此时如果停掉slave,在添加数据
stop slave;
发现并没有刚才添加的id为2的这条数据 。
因为此时slave已经停掉了,没有负责给我们提供查询操作的服务了,所以查不到了 。刚才可以写入,也是意味着 写入操作是有 master来完成的 。
这时恢复slave , 再查询
start slave;
这时2已经有了,恢复了slave后,先主从通信同步了刚才的数据,再继续提供查询操作 。
到此,读写分离完成 。
参考:
MySql 读写分离怎么配置?。浚浚浚?/h2>MySql 读写分离配置 MySQL是开源的关系型数据库系统 。MySql 读写分离配置,主从同步复制(Replication)是从一台MySQL数据库服务器(主服务器master)复制数据到另一个服务器(从服务器slave)的一个进程 。MySql 读写分离配置 配置主服务器 (master) 1、编辑数据库配置文件my.cnf 或 my.ini (windows),一般在/etc/目录下 。#vi /etc/my.cnf 在[mysqld]的下面加入下面代码: log-bin=mysql-bin server-id=1 innodb_flush_log_at_trx_commit=1 sync_binlog=1 binlog-do-db=wordpress binlog_ignore_db=mysql server-id=1中的1可以任定义 , 只要是唯一的就行 。binlog-do-db=wordpress是表示只备份wordpress 。binlog_ignore_db=mysql表示忽略备份mysql 。不加binlog-do-db和binlog_ignore_db , 那就表示备份全部数据库 。2、然后重启MySQL: #service mysqld restart 3、登录MySQL服务器 。#mysql -uroot -pMySql 读写分离其余配置 在主服务器新建一个用户赋予“REPLICATION SLAVE”的权限 。你不需要再赋予其它的权限 。在下面的命令 , 把X.X.X.X替换为从服务器的IP 。mysqlCREATE USER 'user'@ 'X.X.X.X' IDENTIFIED BY 'password'; mysqlGRANT REPLICATION SLAVE ON *.* TO 'user'@'X.X.X.X' IDENTIFIED BY 'password'; 4、执行以下命令锁定数据库以防止写入数据 。mysqlFLUSH TABLES WITH READ LOCK; 5、退出mysql命令行,导出数据库 #mysqldump -u root -p123456 --all-databases/root/all.sql 6、使用scp命令传输数据库文件all.sql到从服务器 。#scp /root/all.sql root@:/root 7、再次连接数据库进入mysql命令行查看master状态 。mysqlSHOW MASTER STATUS; 请记下显示的信息,配置从服务器会用到 。+——————+———-+————–+——————+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +——————+———-+————–+——————+ | mysql-bin.000001| 253| dbispconfig | mysql | +——————+———-+————–+——————+ 1 row in set (0.00 sec) 8、解锁数据表 。mysqlUNLOCK TABLES; 配置从服务器 (slave) 登录从服务器 。1、导入主服务器的数据库 。#mysql -u root -p123456/root/all.sql 2、编辑配置文件my.cnf,在[mysqld]下面加入: server-id=2 注:2可以自己定义,只要保证唯一的就行 。3、保存文件并重启mysqld 。#service mysqld restart 4、登录mysql服务器 , 执行以下命令 。mysqlCHANGE MASTER TO MASTER_HOST='X.X.X.X', MASTER_USER='user', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000001, MASTER_LOG_POS=253, MASTER_CONNECT_RETRY=10; 注: MASTER_HOST:主服务器的IP 。MASTER_USER:配置主服务器时建立的用户名 MASTER_PASSWORD:用户密码 MASTER_PORT:主服务器mysql端口,如果未曾修改,默认即可 。这里master_log_file和master_log_pos就是前面show master status的结果 。5、启动slave进程 。mysqlSTART SLAVE; mysqlSHOW SLAVE STATUS; 如果能查出一条记录 那么,配置成功6、查看mysql的日志,一般在/var/log/目录下,如果启动成功 , 你应该会看到类似下面的日志 。091104 8:42:02 [Note] Slave I/O thread: connected to master ‘root@X.X.X.X:3306?, replication started in log ‘mysql-bin.000001? at position 98 现在主服务器和从服务器已经配置好了 。另外你可能需要设置主服务器的数据库二进制日志的过期时间,可以在配置文件中使用参数expire_logs_days来设定 。java spring事务设置,方法头部设置 @Transactional(readOnly=true) java 连接 驱动 设置 jdbc.connection.driver=com.mysql.jdbc.ReplicationDriver jdbc.connection.url=jdbc:mysql:replication://192.168.202.190,192.168.202.190/job?useUnicode=truecharacterEncoding=utf-8MySql 读写分离配置到此结束 资料来源:

推荐阅读