| default_storage_engine | InnoDB |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_disk_storage_engine | InnoDB |
±---------------------------------±-------+
4 rows in set (0.00 sec)
// 修改配置文件
$ vim /etc/my.ini
[mysqld]
default-storage-engine=MyISAM
$ systemctl restart mysqld
mysql> show variables like ‘%storage_engine%’;
±---------------------------------±-------+
| Variable_name | Value |
±---------------------------------±-------+
| default_storage_engine | MyISAM |
| default_tmp_storage_engine | InnoDB |
| disabled_storage_engines | |
| internal_tmp_disk_storage_engine | InnoDB |
±---------------------------------±-------+
4 rows in set (0.00 sec)
#### 修改表存储引擎
如果是slave数据库的表是MyISAM,master数据库的表是InnoDB。直接覆盖master数据库来同步数据的话,slave数据库表的存储引擎也将会同步变成InnoDB。扩展:[InnoDB一棵B+树可以存放多少行数据?](
)
#### 更换存储引擎遇到的问题
`This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)`
#### 出现的原因
在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。
如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
#### 解决方案
mysql> set global log_bin_trust_function_creators=TRUE;
`Specified key was too long; max key length is 1000 bytes`
#### 出现的原因
1. DB的 engine 是 MyISAM
2. 字符集是 utf8 ,1个 utf8=3bytes
3. (索引长度总和) * 3 > 1000。
#### 解决方案
1. 修改DB engine 至 innodb
2. 更改字符集
3. 减小字段长度
> 注意:一定不要手动去修改slave数据库中的数据,需要给slave的用户设置只读。
至此,mysql的数据库主从设置已经配置成功。在master中修改数据库,会同步到slave中。
## Mycat基于MySQL的读写分离
Mycat不负责数据的同步,所以要还是要基于[MySQL的主从配置来实现读写分离](
)。
### 安装Mycat
由于github限制,所以以后新版本从以下地址下载 http://dl.mycat.io
Linux创建文件夹/usr/local/mycat,进入文件夹,下载安装包
$ wget http://dl.mycat.io/1.6.7.5/2020-3-3/Mycat-server-1.6.7.5-test-20200303154735-linux.tar.gz