跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

mysql不同版本和存储引擎选型的验证_MySQL

bitsCN.com mysql的版本和存储引擎较多,为了选择最适合业务使用的系统,需要进行一定的验证,本文描述mysql的验证过程和思路。

主要涉及:

Mysql的版本v Mariadb v Tokudb v Oracle具体的存储引擎v Myisam v Innodb v TokuDB v Maria如下是具体的思路My.cnf配置log-bin=mysql-bin 关闭,不要写日志skip-networking 开启安装和配置v mariadb5.5 v Oracle v Tokudb如上目录下有对应的安装,卸载脚本

具体步骤如下:

1.首先停止mysql服务

a) service mysql stop / service mysqld stop b) killall -9 mysql | killal -9 mysqld c) /etc/profile中不要有mysql的环境变量设置

2.安装引擎

a) 以上的各个对应目录有安装的脚本

3.检验

a) 进入对应的安装目录下的bin目录b) ./mysql -uroot -p123456 检查安装的版本信息是否正确c) show engines; show plugins; 可以查看引擎的安装情况

4.运行单元测试验证各个引擎的性能

单元测试[Gtest]基础插入函数包括v 迭代次数v 存储包的大小:数据字段可设置大小###是具体的业务表static void insertOneSession(int count, int size, bool canTruncate = true){### item = createItem(size);cppdb::session session;static const std::string sql ="insert into `###`) / VALUES ( ?, FROM_UNIXTIME(?), ?, ?, ?, ?, ?, / INET_ATON(?), ?, ?, ?, ?, ?, /?, ?, ?)";{try {session = cppdb::session(::common::base::BaseData::dbConnectString);cppdb::statement stmt;if (canTruncate) {const static string ready = "TRUNCATE table ***";stmt = session.prepare(ready);stmt.exec();}stmt = session.prepare(sql);for (int i = 0; i stmt.reset();stmt.bind(###);...

stmt.exec();}} catch (std::exception const &e) {LOG(ERROR)}// //关闭链接if (session.is_open()) session.close();}{//统计出表空间session =cppdb::session(MySQL(Linux)

MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。

下载"mysql:user=root;password=123456;database=mysql;set_charset_name=utf8; @pool_size=1");cppdb::statement stmt =session.create_statement("select table_name,engine,ROUND(data_length/1024,2) size,table_rows from information_schema.tables where table_schema='###' and table_name='traffic'");cppdb::result r = stmt.query();while(r.next()){string table_name, engine;long size, table_rows;r.fetch(table_name);r.fetch(engine);r.fetch(size);r.fetch(table_rows);LOG(INFO)}if (session.is_open()) session.close();}}Isam存储测试class benchMyisamTest: public testing::Test {public:static void SetUpTestCase() {//建立对应的表结构std::string mysql = "/usr/local/mysql/bin/mysql --default-character-set=utf8 -uroot -p123456 -D mysql -e /"source myisam.sql/"";system(mysql.c_str());}static void TearDownTestCase() {}};TEST_F(benchMyisamTest, 1w100) {insertOneSession(10000, 100);}TEST_F(benchMyisamTest, 1w1000) {insertOneSession(10000, 1000);}....

多线程存储测试#include//多个工作线程的处理int thread_Num, thread_Size;void worker(){insertOneSession(thread_Num, thread_Size);}void workerThread(int ts, int count, int size){//多线程模式下必须使用,否则mysql client库无法连接错误111 mysql_library_init(0, NULL, NULL);thread_Num = count;thread_Size = size;boost::thread_group threads;for (int i = 0; i threads.create_thread(&worker);}threads.join_all();LOG(INFO)//这个错误好像是libmysqlclient的兼容问题 Error in my_thread_global_end(): 4 threads didn't exit mysql_library_end();}TEST_F(benchMyisamTest, thread_1w100) {workerThread(2, 10000, 100);}TEST_F(benchMyisamTest, thread_30w) {workerThread(3, 100000, 1000);}..

其他引擎测试和如何类似,你可以写出你自己的测试引擎结果如下只是我用的虚拟机平台的结果,不代表普适性存储引擎优点缺点MyISAMv 插入快v 查询可以使用索引v 存在表崩溃问题ARCHIVEv 大量时比myisam还快v 无索引v 不能更新、删除InnoDBv 支持事务v 慢TokuDBv 写入的高性能没有测到vMariav 和Myisam类似v 对崩溃安全v http://pan.baidu.com/s/1sj0cI8t 是具体的一些安装和配置不同的数据库脚本bitsCN.com

相关文章