mysql多实例好处_mysql多实例

需求:

mysql主从复制,主mysql版本为5.5,从mysql版本为5.7

主库不需要操作,只在从数据库上配置

由于需要同步18个数据库,由于主库的端口各不相同,从库同样要开启18个实例

前面直接用脚本操作

#!/bin/bash

#多实例端口号

port="3306 3312 3307 3319 3308 3309 3311 3330 3320 3321 3326 3327 3333 3314 3318 3323 3317 3316 3307"

for i in $port

do

#创建数据目录

mkdir /data/$i/dbdata -p

#修改权限

chown mysql:mysql /data/$i -R

#初始化数据库

/usr/local/mysql/bin/mysqld --initialize-insecure --user="mysql" --basedir="/usr/local/mysql" --datadir="/data/$i/dbdata"

#拷贝配置文件

cp /opt/my.cnf /data/$i/

#修改配置

sed -i "s/3312/$i/g" /data/$i/my.cnf

#启动

mysqld_safe --defaults-file="/data/$i/my.cnf" &

#登录,第一次登录默认密码为空

mysql -S /tmp/mysql$i.sock << EOF

#修改密码

use mysql;

set password = password('******');

#授予权限

grant all on *.* to root@'192.168.61.%' identified by '******';

flush privileges;

exit;

EOF

done脚本注释: #初始化,5.7版本废弃mysql_install_db命令,该用mysqld 来初始化,—initialize 参数来创建密码,默认保存在~/.mysql_secret 。 —initialize-insecure 参数创建空密码 主配置文件[client]

port = 3312

socket = /tmp/mysql3312.sock

default-character-set = utf8mb4

[mysql]

prompt="MySQL [d]> "

no-auto-rehash

[mysqld]

port = 3370

socket = /tmp/mysql3312.sock

basedir = /usr/local/mysql

datadir = /data/3312/dbdata

pid-file = /data/3312/mysql.pid

user = mysql

bind-address = 0.0.0.0

server-id = 5

init-connect = 'SET NAMES utf8mb4'

character-set-server = utf8mb4

skip-name-resolve

log_bin = mysql-bin

binlog_format = mixed

expire_logs_days = 7查看服务[[email protected] ~]# netstat -lutnp |grep mysqld

tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 28591/mysqld

tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 30546/mysqld

tcp 0 0 0.0.0.0:3309 0.0.0.0:* LISTEN 31062/mysqld

tcp 0 0 0.0.0.0:3311 0.0.0.0:* LISTEN 31564/mysqld

tcp 0 0 0.0.0.0:3312 0.0.0.0:* LISTEN 27792/mysqld

tcp 0 0 0.0.0.0:3314 0.0.0.0:* LISTEN 2978/mysqld

tcp 0 0 0.0.0.0:3316 0.0.0.0:* LISTEN 5322/mysqld

tcp 0 0 0.0.0.0:3317 0.0.0.0:* LISTEN 4736/mysqld

tcp 0 0 0.0.0.0:3318 0.0.0.0:* LISTEN 3564/mysqld

tcp 0 0 0.0.0.0:3319 0.0.0.0:* LISTEN 11531/mysqld

tcp 0 0 0.0.0.0:3320 0.0.0.0:* LISTEN 32591/mysqld

tcp 0 0 0.0.0.0:3321 0.0.0.0:* LISTEN 661/mysqld

tcp 0 0 0.0.0.0:3323 0.0.0.0:* LISTEN 4150/mysqld

tcp 0 0 0.0.0.0:3326 0.0.0.0:* LISTEN 1229/mysqld

tcp 0 0 0.0.0.0:3327 0.0.0.0:* LISTEN 1774/mysqld

tcp 0 0 0.0.0.0:3330 0.0.0.0:* LISTEN 32066/mysqld

tcp 0 0 0.0.0.0:3333 0.0.0.0:* LISTEN 2392/mysqld

tcp 0 0 0.0.0.0:3370 0.0.0.0:* LISTEN 6497/mysqld

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5923/mysqld登录到主数据库上查看file,pos等信息,来配置从数据库#指定主服务器

mysql> change master to master_host="192.168.101.22",master_port=3370,master_user="kfuser",master_password="kfpasswd",master_log_file="mysql-bin.000006",master_log_pos=246808818;

mysql> start slave;

mysql> show slave statusG

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.101.99

Master_User: ****

Master_Port: 3307

Connect_Retry: 60

Master_Log_File: mysql-bin.000007

Read_Master_Log_Pos: 326301199

Relay_Log_File: host-192-168-150-202-relay-bin.000002

Relay_Log_Pos: 164439916

Relay_Master_Log_File: mysql-bin.000007

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

错误1:

Last_Errno: 1032

Last_Error: Could not execute Update_rows_v1 event on table InfoServer_HS.ONLINENUMREALTIME; Can’t find record in ‘ONLINENUMREALTIME’, Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND; the event’s master log mysql-bin.000006, end_log_pos 246506088

造成1032错误的根本原因是主从数据库数据不一致,导致同步操作在从库上无法执行.

解决办法:

vim /etc/my.cnf

slave-skip-errors = 1032 #跳过这个错误

错误2:

Last_SQL_Errno: 1677

Last_SQL_Error: Column 5 of table ‘InfoServer_HS.ONLINENUM20160906’ cannot be converted from type ‘varchar(100)’ to type ‘varchar(100)’

解决办法:

mysql> stop slave;

mysql> set global slave_type_conversions=ALL_NON_LOSSY;

mysql> start slave;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值