mysql多实例及主从复制

    xiaoxiao2025-12-18  10

    同一服务器多实例mysql: 优点:有效利用服务器资源 缺点:当某个数据库实例并发很高或有慢SQL查询时整个实例会消耗大量的系统CPU,磁盘,I/O等资源 适用场景: 1.资金紧张的公司 2.并发访问不是特别大的业务 3.门户网站(一般从库多实例) 搭建3307端口mysql 1.解压安装 mkdir /opt/3307_mysql cp mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz /opt/3307_mysql/ cd /opt/3307_mysql/ tar zxvf mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz ln -s /opt/3307_mysql/mysql-5.6.30-linux-glibc2.5-x86_64 /opt/3307_mysql/mysql mkdir -p /data/my3307 mkdir /data/my3307/{run,data,log,tmp} chown -R mysql:mysql /data/my3307 chown -R mysql:mysql mysql-5.6.30-linux-glibc2.5-x86_64 2.配置修改 修改配置文件vim /data/my3307/my.cnf basedir = /opt/3307_mysql/mysql datadir = /data/my3307/data port = 3307 (指定端口) # server_id = ..... socket = /data/my3307/mysql.sock(多实例重点就是指定socket文件) ln -s /data/my3307/my.cnf /opt/3307_mysql/mysql/my.cnf 注:配置初始化等操作都同单实例,登录不同实例时指定不同的socket文件 eg:mysql -uroot -h127.0.0.1 -S /data/my3307/mysql.sock 利用自己搭建的多实例mysql做主从复制 主从复制应用场景: 数据备份 读写分离,从服务器上实现负载均衡 从服务器根据业务重要性进行拆分访问 主从复制原理: 异步复制过程,打开master端的Binlog记录功能,复制过程就是slave端从master获取binlog日志,再在slave上以相同顺序执行binlog日志中所记录的各种SQL操作。 打开binlog记录功能: [mysqld] log-bin = /data/my3306/mysql-bin master: 1.修改配置: 添加id号,开启binlog功能 vim /data/my3306/my.cnf [mysqld] server-id = 1 log-bin = /data/my3306/mysql-bin 2.重启主库: mysqladmin -uroot -S /data/my3306/mysql.sock shut down 关闭 cd /opt/mysql ./bin/mysqld_safe --defaults-file=/data/my3306/my.cnf --user=mysql & 启动 3.登录数据库检查: mysql -uroot -S /data/my3306/mysql.sock mysql> show variables like 'server_id'; 检查binlog功能是否开启。 mysql> show variables like 'log_bin'; 4.建立从库复制的账号rep: mysql> grant replication slave on *.* to 'rep'@'%' identified by 'abc123'; mysql> flush privileges; 刷新授权表 5.实现对主数据库锁表只读(不退出当前窗口) mysql> flush table with read lock; mysql> show master status; 从库导入全备后,继续主从复制时从这个位置开始。 导出数据库所有文件: mysqldump -uroot -S /data/my3306/mysql.sock --master-data=2 --events -A -B | gzip > mysql_bak.$(date +%F).sql.gz 解锁:mysql> unlock tables; --master-data --single-transaction   --master-data[=#]  在备份导出的文件里追加二进制binlog文件的位置和名称                          如果值等于1,就会添加一个CHANGE MASTER语句                          如果值等于2,就会在CHANGE MASTER语句前添加注释(不起作用了呗~)                          这个参数会--lock-all-tables锁表,除非你指定了--single-transaction                          这种情况下,锁表只会在dump开始的时候持续一小段时间,照理说                          在dump的时候,任何动作都会影响到binlog文件                          dump结束之后,选项会自动关闭锁表功能 就是主从复制在做全量备份的时候,这个选项可以自动帮我们锁表和识别binlog临界文件,就不需要我们锁表,再看临界文件编号,再执行CHANGE MASTER填写binglong位置信息到从库master.info文件中了,提高了从库部署效率吧。 从库: 编辑配置文件 vim /data/my3307/my.cnf [mysqld] server-id = 3 重启数据库: mysqladmin -uroot -S /data/my3307/mysql.sock shut down cd /opt/3307_mysql/mysql ./bin/mysqld_safe --defaults-file=/data/my3307/my.cnf --user=mysql & 检查参数: mysql> show variables like 'log_bin'; mysql> show variables like 'server_id'; 导入数据: gzip -d mysql_bak.2016-08-31.sql.gz mysql -S /data/my3307/mysql.sock < mysql_bak.2016-08-31.sql 登录从库,配置参数: mysql> change master to master_host='172.16.1.233', -> master_port=3306, -> master_user='rep', -> master_password='abc123', -> master_log_file='mysql-bin.000001', -> master_log_pos=396; 开启从库: mysql -S /data/my3307/mysql.sock -e "start slave;" mysql -S /data/my3307/mysql.sock -e "show slave status\G;" 检测:在主库插入数据,登录从库查看是否同步。 主备断开时,重新指定断开时的binlog文件和setion即可
    最新回复(0)