haproxy负载均衡以及基于代码层级的读写分离

Haproxy负载均衡

  1. 修改配置文件

42 defaults

43 mode tcp

44 log global

45 option httplog

46 option dontlognull

......

63 frontend main *:3306

64 acl url_static path_beg -i /static

/images /javascript /stylesheets

65 acl url_static path_end -i .jpg .gif

.png .css .js

66

67 # use_backend static if url_static

68 default_backend mysql

....

85 backend mysql

86 balance roundrobin

87 server master 10.1.1.11:3306 check

88 server slave 10.1.1.12:3310 check

2.测试

[root@client bin]# ./mysql -h10.1.1.30 -P3306 -uzhangmin -

pzhangmin

mysql> show variables like 'server_id';

mysql> exit

Bye

[root@client bin]# cd bin/

基于代码层级的读写分离

mysql的主从复制

1. master

1. rm -rf /etc/my.cnf

2. glibc,下载解压

3. 将解压后的文件移动的指定的/usr/local/mysql

4. mkdir /usr/local/mysql/mysql-files

5. useradd -r -s /sbin/nologin mysql

6. chown mysql:mysql /usr/local/mysql/mysql-files

7. chmod 750 /usr/local/mysql/mysql-files

8. /usr/local/mysql/bin/mysqld --initialize --

user=mysql --basedir=/usr/local/mysql/

9. 查看data目录和初始密码

10. /usr/local/mysql/bin/mysql_ssl_rsa_setup --

datadir=/usr/local/mysql/data

11. 配置文件

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

port=3306

log-error=/usr/local/mysql/data/db01-

master.err

log-bin=/usr/local/mysql/data/binlog

server-id=10

character_set_server=utf8mb4

12.cp /usr/local/mysql/suport-files/msyql.server

/etc/init.d/mysql8

13.service mysql8 start

14.sed -i '$aexport

PATH=$PATH:/usr/local/mysql/bin' /etc/profile

15.source /etc/profile

16.mysql -h10.1.1.11 -P3306 -uzhangmin -

pzhangmin

17.create user 'aaaa'%'aaaa' identified by 'sn'

18.grant all on . to 'aaaa';

2. slave

1. rm -rf /etc/my.cnf

2. glibc,下载解压

3. 将解压后的文件移动的指定的/usr/local/mysql4. mkdir /usr/local/mysql/mysql-files

5. useradd -r -s /sbin/nologin mysql

6. chown mysql:mysql /usr/local/mysql/mysql-files

7. chmod 750 /usr/local/mysql/mysql-files

8. 配置文件

[mysqld]

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket=/tmp/mysql.sock

port=3310

log

error=/usr/local/mysql/data/mysql.log

relay

log=/usr/local/mysql/data/relaylog

server-id=11

character_set_server=utf8mb4

9.cp /usr/local/mysql/suport-files/msyql.server

/etc/init.d/mysql8

3. 同步数据

1. yum -y install rsync

2. service mysql8 stop

3. master=> rm -rf /usrlocal/mysql/data/auto.cnf4. rsync -av /usr/local/mysql/data

root@slaveip:/usr/loca/mysql

5. salve=>service mysql8 start

6. master=>service msyql8 start

4. 设置主数据库

1. 创建远程slave账号

create user 'slave'@'%' identified by

'slave';

grant replication slave on *.* to

'slave'%'%';

flush privileges;

2. flush tables with read lock;

3. show master status\G;

1. 文件名称

2. 文件位置

5. 设置从数据库 help change master to

1. change master to

change master to

MASTER_HOST = '10.1.1.11' ,

MASTER_USER = 'slave' ,

MASTER_PASSWORD = 'slave' ,

MASTER_PORT = 3306,

MASTER_LOG_FILE = 'binlog000006' ,

MASTER_LOG_POS = 873,

GET_MASTER_PUBLIC_KEY = 1;

2. 启动slave并且查看状态

start slave;

show slave status\G

3. master => unlock tables;

python代码的读写分离

1.安装pymysql 是python管理mysql的驱动,或者成为

连接器

pip3 install pymysql

2.在python3的命令行界面引入pymysql

import pymysql

3.创建两个connenction对象,一个指向master

mysql,一个指向slave msyql

master_conn=pymysql.connect(host="10.1.1.11"

,user="zhangmin",password="zhangmin",port=33

06,database="test");

slave_conn=pymysql.connect(host="10.1.1.12",

user="zhangmin",password="zhangmin",port=331

0,database="test");

4. 获取数据游标 master

master_cursor=master_conn.cursor()

5. 执行查询 master

select_sql="select * from user";

master_cursor.execute(select_sql);

rs=cursor.fetchall()

6. 执行修改 master

update_sql="update user set

password='000' where username='aaaa'"

master_cursor.execute(update_sql)

master_conn.commit()

7. 执行删除 master

delete_sql="delete from user where

username='aaaa'"

master_cursor.execute(delete_sql)

master_conn.commit()

8. 执行新增 master

insert_sql="insert into user values

(1004, 'dddddd' , 'ddddddd')"

master_cursor.execute(insert_sql);

master_conn.commit()

9. 执行查询 slave

>>> # 执行查询 获得获得slave 游标

...

>>> slave_cursor=slave_conn.cursor()

>>> sql

'select * from user'

>>> slave_cursor.execute(sql)

3

>>> slave_cursor.fetchall()

((2, 'bbb' , 'bbbb'), (3, 'ccc' , 'cccc'),

(1004, 'ddddd' , 'ddddddd'))

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值