8.14笔记

一、haproxy负载均衡双主MySQL数据库

1. 修改配置文件

 
  1. 42 defaults

  2. 43 mode tcp

  3. 44 log global

  4. 45 option httplog

  5. 46 option dontlognull

  6. ......

  7. 63 frontend main *:3306

  8. 64 acl url_static path_beg -i /static

  9. /images /javascript /stylesheets

  10. 65 acl url_static path_end -i .jpg .gif

  11. .png .css .js

  12. 66

  13. 67 # use_backend static if url_static

  14. 68 default_backend mysql

  15. ....

  16. 85 backend mysql

  17. 86 balance roundrobin

  18. 87 server master 10.1.1.11:3306 check

  19. 88 server slave 10.1.1.12:3310 check

2. 测试

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

  2. pzhangmin

  3. mysql: [Warning] Using a password on the command line

  4. interface can be insecure.

  5. Welcome to the MySQL monitor. Commands end with ; or \g.

  6. Your MySQL connection id is 19

  7. Server version: 8.0.33 MySQL Community Server - GPL

  8. Copyright (c) 2000, 2023, Oracle and/or its affiliates.

  9. Oracle is a registered trademark of Oracle Corporation

  10. and/or its

  11. affiliates. Other names may be trademarks of their

  12. respective

  13. owners.

  14. Type 'help;' or '\h' for help. Type '\c' to clear the

  15. current input statement.

  16. mysql> show variables like 'server_id';

  17. +---------------+-------+

  18. | Variable_name | Value |

  19. +---------------+-------+

  20. | server_id | 10 |

  21. +---------------+-------+

  22. 1 row in set (0.00 sec)

  23. mysql> exit

  24. Bye

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

  26. pzhangmin

  27. mysql: [Warning] Using a password on the command line

  28. interface can be insecure.

  29. Welcome to the MySQL monitor. Commands end with ; or \g.

  30. Your MySQL connection id is 25

  31. Server version: 8.0.33 MySQL Community Server - GPL

  32. Copyright (c) 2000, 2023, Oracle and/or its affiliates.

  33. Oracle is a registered trademark of Oracle Corporation

  34. and/or its

  35. affiliates. Other names may be trademarks of their

  36. respective

  37. owners.

  38. Type 'help;' or '\h' for help. Type '\c' to clear the

  39. current input statement.

  40. mysql> show variables like 'server_id';

  41. +---------------+-------+

  42. | Variable_name | Value |

  43. +---------------+-------+

  44. | server_id | 11 |

  45. +---------------+-------+

  46. 1 row in set (0.01 sec)

  47. mysql> exit

  48. Bye

  49. [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. 配置文件

 
  1. [mysqld]

  2. basedir=/usr/local/mysql

  3. datadir=/usr/local/mysql/data

  4. socket=/tmp/mysql.sock

  5. port=3306

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

  7. master.err

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

  9. server-id=10

  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/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. 配置文件

 
  1. [mysqld]

  2. basedir=/usr/local/mysql

  3. datadir=/usr/local/mysql/data

  4. socket=/tmp/mysql.sock

  5. port=3310

  6. logerror=/usr/local/mysql/data/mysql.log

  7. relaylog=/usr/local/mysql/data/relaylog

  8. server-id=11

  9. 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.cnf 4. rsync -av /usr/local/mysql/data root@slaveip:/usr/loca/mysql

5. salve=>service mysql8 start

6. master=>service msyql8 start

4. 设置主数据库

1. 创建远程 slave 账号

 
  1. create user 'slave'@'%' identified by

  2. 'slave';

  3. grant replication slave on *.* to

  4. 'slave'%'%';

  5. flush privileges;

2. flush tables with read lock;

3. show master status\G;

1. 文件名称

2. 文件位置

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

1. change master to

 
  1. change master to

  2. MASTER_HOST = '10.1.1.11'

  3. ,

  4. MASTER_USER = 'slave'

  5. ,

  6. MASTER_PASSWORD = 'slave'

  7. ,

  8. MASTER_PORT = 3306,

  9. MASTER_LOG_FILE = 'binlog000006'

  10. ,

  11. MASTER_LOG_POS = 873,

  12. GET_MASTER_PUBLIC_KEY = 1;

2. 启动 slave 并且查看状态

 
  1. start slave;

  2. 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

 
  1. master_conn=pymysql.connect(host="10.1.1.11"

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

  3. 06,database="test");

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

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

  6. 0,database="test");

4. 获取数据游标 master

master_cursor=master_conn.cursor()

5. 执行查询 master

 
  1. select_sql="select * from user";

  2. master_cursor.execute(select_sql);

  3. rs=cursor.fetchall()

6. 执行修改 master

 
  1. update_sql="update user set

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

  3. master_cursor.execute(update_sql)

  4. master_conn.commit()

7. 执行删除 master

 
  1. delete_sql="delete from user where

  2. username='aaaa'"

  3. master_cursor.execute(delete_sql)

  4. master_conn.commit()

8. 执行新增 master

 
  1. insert_sql="insert into user values

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

  3. master_cursor.execute(insert_sql);

  4. master_conn.commit()

9. 执行查询 slave

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

  2. ...

  3. >>> slave_cursor=slave_conn.cursor()

  4. >>> sql

  5. 'select * from user'

  6. >>> slave_cursor.execute(sql)

  7. 3

  8. >>> slave_cursor.fetchall()

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

  10. (1004, 'ddddd' , 'ddddddd'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值