1.MySQL介绍
2.MySQL多实例介绍
2.1 什么是MySQL多实例
3.安装并配置多实例MySQL数据库
先使用多实例安装mysql
1.二进制安装:
tar xf mysql-5.5.61-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
ln -s /usr/local/mysql-5.5.61-linux-glibc2.12-x86_64 /usr/local/mysql
chown -R mysql.mysql /usr/local/mysql
mkdir -p /data/{3307,3308}/data
chown -R mysql.mysql /data/
2.添加环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts' >> /etc/profile
3.初始化数据库
mysql_install_db --datadir=/data/3307/data --basedir=/usr/local/mysql --user=mysql
mysql_install_db --datadir=/data/3308/data --basedir=/usr/local/mysql --user=mysql
如果是5.7版本的话用如下命令替换
mysqld --initialize-insecure -datadir=/data/3307/data --basedir=/usr/local/mysql --user=mysql
mysqld --initialize-insecure -datadir=/data/3307/data --basedir=/usr/local/mysql --user=mysql
4.生成配置my.conf的配置文件,注意master和slave的server-id不能重复
vim /data/3306/my.cnf
[client]
port = 3306
socket = /data/3306/mysql.sock
[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id = 2
[mysqldump]
quick
max_allowed_packet = 16M
[mysqld_safe]
log-error=/data/3306/mysql_3306.err
pid-file=/data/3306/mysqld.pid
cp /data/3306/my.cnf /data/3307/my.cnf
修改目录里所有的3306为3307
sed -i "s/3306/3307/g" /data/3307/my.cnf
将server-id修改为3
5.初始化MySQL多实例数据文件
cd /usr/local/mysql/scripts/
./mysql_install_db --datadir=/data/3306/data --basedir=/usr/local/mysql
--user=mysql
./mysql_install_db --datadir=/data/3307/data --basedir=/usr/local/mysql
--user=mysql
6.启动MySQL多实例
启动:# mysqld_safe --defaults-file=/data/3306/my.cnf &
如果第一次启动不了
则需要跳过权限表
mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables &
mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables &
关闭:# mysqladmin. -uroot -p'' -S /data/3306/mysql.sock shutdown
4.MySQL主从复制介绍
MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践
一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力 这样的方案来进行部署与实施的。
如下图:
当web server1/2/3要写入数据时,则向mysql db Master(主服务器)发出写入请求(即写入到master),如果要进入读操作时,则只向从服务器 mysql DB Slave1或2或3发出读取请求。如此将原本读写在同一台服务器的工作量分摊到了一台负责写入,N台负责读取(大部分的网站都是读取请求远大于写入请求),从而从一定程度时实现了负载均衡(如果有N台从服务器,则由主从代理系统自动分配某个具体请求从哪一个从服务器读取)。
读写分离是靠主从复制来实现的。即当一个数据写入到主服务器后,主服务器会将写入信息写入到binlog(二进制日志)里,同时同步(或异步或半同步)到从服务器里。从服务器根据主服务器传来的binlog,生成relay-log(中继日志),然后mysql服务器再用relay-log的信息将数据写入到数据库。
如此做的优点除了实现负责均衡之外,还为我们保留了两份实时热备的数据binlog和relay-log。当服务器发生灾难时,我们可以用他们将数据恢复到任何一个时间点。
准备:
主从复制;
ntpdate cn.pool.ntp.org
hwclock --systohc
这时在主库上操作
vi /etc/my.cnf
bin_log=mysql //开启bin_log
server-id=1 //修改server-id
log-bin-index=master-bin.index //开启binlog日志功能
systemctrl restart mysqld
创建一个用于让从数据库连接的用户
mysql> create user 'copy'@'%' identified with mysql_native_password by 'Cloudbu@123';
mysql> grant replication slave on *.* to 'copy'@'%';
mysql -uroot -p123456 -e "show master status;"
// 查看主库的状态
mysql-bin.000003 | 199
在从库上
修改配置文件,必须指定中继日志的名称
[mysqld]
server_id=2
relay-log=relay-log
relay-log-index=relay-log.index
[root@localhost ~]# systemctl stop mysql
[root@localhost ~]# systemctl start mysql
就可以查看
主库上的数据库同步到从库上
设定数据同步
与主库的状态一致;
mysql>change master to
MASTER_HOST='192.168.0.141',
MASTER_PORT=3306,
MASTER_USER='rcopy',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql.000003', //对比主库MASTER_LOG_FILE
MASTER_LOG_POS=199; //对比主库的MASTER_LOG_POS
然后开启同步开关
start slave;
show slave status\G
注:**如果Slave_IO_Running: 为NO
可能是主从mysqluuid重复
删除 auto.cnf 重启服务
Slave_IO_Running
Slave_SQL_Running都为yes则配置成功**
测试
在主库上新建表,在从库上就能同步到数据