MySQL-MMM架构部署
MySQL-MMM架构使用
MySQL性能调优

1 MySQL-MMM架构部署
1.1 问题

本案例要求熟悉实现MySQL-MMM的架构部署,主要包括以下任务:

安装依赖包
安装软件包
配置MySQL-MMM

1.2 方案

使用5台RHEL 6虚拟机,如图-2所示。其中192.168.4.10、192.168.4.11作为MySQL双主服务器,192.168.4.12、192.168.4.13作为主服务器的从服务器,192.168.4.100作为MySQL-MMM架构中管理监控服务器,实现监控MySQL主从服务器的工作状态及决定故障节点的移除或恢复工作,架构搭建完成后使用客户机192.168.4.120进行访问,客户机需要安装MySQL-client软件包。

图-2
1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装MySQL-MMM

1)安装依赖关系(MySQL集群内5台服务器master1,master2,slave1,slave2,monitor)均需安装

[root@master1 ~]# yum -y install gcc* perl-Date-Manip  perl-Date-Manip  perl-Date-Manip perl-XML-DOM-XPath perl-XML-Parser perl-XML-RegExp rrdtool perl-Class-Singleton perl perl-DBD-MySQL perl-Params-Validate perl-MailTools perl-Time-HiRes
.. ..

2)安装MySQL-MMM软件依赖包(MySQL集群内5台服务器master1,master2,slave1,slave2,monitor)均需安装,软件包讲师提供

安装安装Log-Log4perl 类

[root@mysql-master1 ~]# rpm -ivh perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
warning: perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing...                ######################### [100%]
1:perl-Log-Log4perl        ########################  [100%]

安装Algorithm-Diff类

[root@mysql-master1 ~]# tar -zxvf Algorithm-Diff-1.1902.tar.gz  //解压安装包
.. ..
[root@mysql-master1 ~]# cd Algorithm-Diff-1.1902                //切换到安装目录
[root@mysql-master1 Algorithm-Diff-1.1902]# perl  Makefile.PL    //生成makefile文件
Checking if your kit is complete...
Looks good
Writing Makefile for Algorithm::Diff
[root@mysql-master1 Algorithm-Diff-1.1902]# make && make install        //编译,编译安装
.. ..
[root@mysql-master1 Algorithm-Diff-1.1902]# cd                //切换到软件包目录
[root@mysql-master1 ~]#

安装Proc-Daemon类

[root@mysql-master1 ~]# tar -zxvf Proc-Daemon-0.03.tar.gz    //解压安装包
.. ..
[root@mysql-master1 ~]# cd Proc-Daemon-0.03                    //切换到安装目录
[root@mysql-master1 Proc-Daemon-0.03]# perl    Makefile.PL    //生成makefile文件
Checking if your kit is complete...
Looks good
Writing Makefile for Proc::Daemon
[root@mysql-master1 Proc-Daemon-0.03]# make && make install    //编译,编译安装
.. ..
[root@mysql-master1 Proc-Daemon-0.03]# cd                    //切换到软件包目录
[root@mysql-master1 ~]#

安装Net-ARP虚拟IP分配工具:

[root@mysql-master1 ~]# gunzip Net-ARP-1.0.8.tgz    //使用gunzip解压tgz格式的安装包
[root@mysql-master1 ~]# tar xvf Net-ARP-1.0.8.tar            //解压tar安装包
.. ..
[root@mysql-master1 ~]# cd Net-ARP-1.0.8                    //切换到安装目录
[root@mysql-master1 Net-ARP-1.0.8]# perl Makefile.PL        //生成makefile文件
Module Net::Pcap is required for make test!
Checking if your kit is complete...
Looks good
Writing Makefile for Net::ARP
[root@mysql-master1 Net-ARP-1.0.8]# make && make install    //编译,编译安装
.. ..
[root@mysql-master1 Net-ARP-1.0.8]# cd                        //切换到软件包目录
[root@mysql-master1 ~]#

安装Mysql-MMM软件包:

[root@mysql-master1 ~]# tar xvf mysql-mmm-2.2.1.tar.gz        //解压安装包
.. ..
[root@mysql-master1 ~]# cd mysql-mmm-2.2.1                    //切换到安装目录
[root@mysql-master1 mysql-mmm-2.2.1]# make && make install    //编译,编译安装
.. ..
[root@mysql-master1 mysql-mmm-2.2.1]#

步骤二:修改配置文件

1)修改公共配置文件

本案例中MySQL集群的5台服务器(master1、master2、slave1、slave2、monitor)都需要配置,可以先配好一台后使用scp复制。

[root@master1 ~]# vim  /etc/mysql-mmm/mmm_common.conf
active_master_role    writer
<host default>cluster_interface        eth0                //设置主从同步的用户pid_path                /var/run/mmm_agentd.pidbin_path                /usr/lib/mysql-mmm/replication_user        slaveuser            //设置主从同步的用户replication_password    pwd123            //设置主从同步用户密码agent_user            agent                //mmm-agent控制数据库用户agent_password        agent                //mmm-agent控制数据库用户密码
</host>
<host master1>                            //设置第一个主服务器ip                    192.168.4.10            //master1 IP 地址mode                    masterpeer                    master2                //指定另外一台主服务器
</host>
<host master2>                            //指定另外一台主服务器ip                    192.168.4.11mode                    masterpeer                    master1
</host>
<host slave1>                                //设置第一台从服务器ip                    192.168.4.12            //slave1 IP 地址mode                    slave                //本段落配置的是slave服务器
</host>
<host slave2>ip                    192.168.4.13mode                    slave
</host>
<role writer>                                //设置写入服务器工作模式hosts                master1,master2        //提供写的主服务器ips                    192.168.4.200        //设置VIP地址mode                    exclusive            //排他模式
</role>
<role reader>                                //设置读取服务器工作模式hosts                slave1,slave2        //提供读的服务器信息ips                    192.168.4.201,192.168.4.202    //多个虚拟IPmode                    balanced                        //均衡模式
</role>
[root@master1 ~]#

2)修改管理主机配置文件(monitor主机配置)

[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>ip                        192.168.4.100        //设置管理主机IP地址pid_path                /var/run/mmm_mond.pidbin_path                /usr/lib/mysql-mmm/status_path                /var/lib/misc/mmm_mond.statusping_ips                192.168.4.10,192.168.4.11,192.168.4.12,192.168.4.13//设置被监控数据库
</monitor>
<host default>monitor_user            monitor                    //监控数据库MySQL用户    monitor_password        monitor                    //监控数据库MySQL用户密码
</host>
debug 0
[root@monitor ~]#

3)修改客户端配置文件

master1配置

[root@master1 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master1

master2配置

[root@master2 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this master2

slave1配置

[root@slave1 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave1

slave2配置

[root@slave2 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this slave2

2 MySQL-MMM架构使用
2.1 问题

本案例要求基于普通版的MySQL服务器改造MMM架构,完成以下任务操作:

启动MMM集群架构
设置集群中服务器为online状态

2.2 方案

MySQL-MMM架构部署完成后需要启动,数据库端启动mmm-agent进程,管理端启动mmm-monitor进程,启动完成后设置所有数据库主机状态为online。
2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:启动MMM集群架构

1)启动mmm-agent进程

master1操作:

[root@master1 ~]# /etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok

master2操作:

[root@master2 ~]# /etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok

slave1操作:

[root@master2 ~]# /etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok

slave2操作:

[root@slave2 ~]# /etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok

2)启动mmm-monitor进程

monitor主机操作:

[root@monitor ~]# /etc/init.d/mysql-mmm-monitor start
Daemon bin: '/usr/sbin/mmm_mond'
Daemon pid: '/var/run/mmm_mond.pid'
Starting MMM Monitor daemon: Ok

步骤二:设置集群中服务器为online状态

控制命令只能在管理端monitor服务器上执行。

查看当前集群中各服务器状态:

[root@monitor ~]# mmm_control showmaster1(192.168.4.10) master/AWAITING_RECOVERY. Roles: master2(192.168.4.11) master/AWAITING_RECOVERY. Roles: slave1(192.168.4.12) slave/AWAITING_RECOVERY. Roles: slave2(192.168.4.13) slave/AWAITING_RECOVERY. Roles: 

设置4台数据库主机状态为online:

[root@monitor ~]# mmm_control set_online master1
OK: State of 'master1' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online master2
OK: State of 'master2' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online slave1
OK: State of 'slave1' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]# mmm_control set_online slave2
OK: State of 'slave2' changed to ONLINE. Now you can wait some time and check its new roles!
[root@monitor ~]#

再次查看当前集群中各服务器状态:

[root@monitor ~]# mmm_control showmaster1(192.168.4.10) master/ONLINE. Roles: writer(192.168.4.200)master2(192.168.4.11) master/ONLINE. Roles: slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.201)slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.202)
[root@monitor ~]#

步骤三:测试MySQL-MMM架构

1)客户机安装MySQL-client软件包

[root@client ~]# tar xvf MySQL-5.6.15-1.el6.x86_64.rpm-bundle.tar
.. ..
[root@client ~]# rpm -ivh MySQL-client-5.6.15-1.el6.x86_64.rpm
.. ..

2)MySQL-MMM虚拟IP访问测试

[root@client ~]# mysql -h192.168.4.200 -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tarena             |
| test               |
+--------------------+
[root@client ~]#
[root@client ~]# mysql -h192.168.4.200 -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tarena             |
| test               |
+--------------------+
[root@client ~]#
[root@client ~]# mysql -h192.168.4.202 -uroot -ppwd123 -e "show databases"
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tarena             |
| test               |
+--------------------+
[root@client ~]#

3)主数据库宕机测试

[root@master1 ~]# service mysql stop                    //停止master1上服务
Shutting down MySQL....                                    [确定]
[root@master1 ~]#
[root@monitor ~]# mmm_control show                        //查看集群内服务器状态

通过输出信息可以看到虚拟IP从master1切换到master2:

  master1(192.168.4.10) master/HARD_OFFLINE. Roles: master2(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.200)slave1(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.201)slave2(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.202)
[root@monitor ~]#
[root@client ~]# mysql -h192.168.4.200 -uroot -ppwd123 -e "show databases"    //访问虚拟IP测试
Warning: Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| tarena             |
| test               |
+--------------------+
[root@client ~]#

3 MySQL性能调优
3.1 问题

基于一台普通版的MySQL服务器,执行下列操作:

练习my.cnf配置相关选项
启用慢查询日志
查看各种系统变量、状态变量

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:MySQL并发及连接控制

max_connections对应并发客户端连接的数量,增加该值会增加 mysqld 要求的文件描述符的数量。若这个数值太小,可能会经常出现“too many connections”错误。比如 默认的数值是151,可以将其改为1024。

1)查看当前已建立的连接数

mysql> FLUSH STATUS;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW GLOBAL STATUS LIKE 'max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 5     |
+----------------------+-------+
1 row in set (0.05 sec)

2)查看当前的最大连接数限制

mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

步骤二:MySQL缓存参数控制

当 Key_reads / Key_read_requests 较低时,可适当加大key_buffer_size的缓存值,以提高性能。而增大sort_buffer_size的值,可以显著提高ORDER和GROUP的响应速度。

1)查看key_read相关数值

mysql> SHOW GLOBAL STATUS LIKE 'key_read%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Key_read_requests | 0     |
| Key_reads         | 0     |
+-------------------+-------+
2 rows in set (0.00 sec)

2)查看当前的key_buffer_size缓存大小

mysql> SHOW VARIABLES LIKE 'key_buffer_size';
+-----------------+---------+
| Variable_name   | Value   |
+-----------------+---------+
| key_buffer_size | 8388608 |
+-----------------+---------+
1 row in set (0.03 sec)

3)查看当前的sort_buffer_size大小

mysql> SHOW VARIABLES LIKE 'sort_buffer_size';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| sort_buffer_size | 262144 |
+------------------+--------+
1 row in set (0.00 sec)

4)查看检索表记录时的读取缓存大小

缓存值read_buffer_size和read_rnd_buffer_size会影响SQL查询的响应速度:

mysql> SHOW VARIABLES LIKE 'read_%_size';
+----------------------+--------+
| Variable_name        | Value  |
+----------------------+--------+
| read_buffer_size     | 131072 |
| read_rnd_buffer_size | 262144 |
+----------------------+--------+
2 rows in set (0.00 sec)

步骤三:MySQL线程重用和开表控制

分析“已打开表的数量/当前可缓存表的数量”,比值不超过95%就基本正常。

1)查看当前已打开、一共打开过多少个表

mysql> SHOW GLOBAL STATUS LIKE 'open%tables';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Open_tables   | 23     |
| Opened_tables | 72    |
+---------------+-------+
2 rows in set (0.01 sec)

2)查看当前可缓存多少个打开的表

mysql> SHOW VARIABLES LIKE 'table_open_cache';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| table_open_cache | 2000  |
+------------------+-------+
1 row in set (0.00 sec)

步骤四:MySQL调整示例:记录慢查询

1)调整my.cnf配置文件,启用慢查询

[root@dbsvr1 ~]# vim  /etc/my.cnf
[mysqld]
.. ..
slow_query_log=1                              //启用慢查询
slow_query_log_file=mysql-slow.log          //制定慢查询日志文件
long_query_time=5                              //查询耗时超过5秒才记录
log_queries_not_using_indexes=1              //记录未使用索引的查询
[root@dbsvr1 ~]# service  mysql  restart
Shutting down MySQL.....                                   [确定]
Starting MySQL....                                         [确定]

2)查看慢查询日志(mysqldumpslow工具)

[root@dbsvr1 ~]# mysqldumpslow  /var/lib/mysql/mysql-slow.log
Reading mysql slow query log from /var/lib/mysql/mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts
.. ..

3)了解与查询相关的缓存选项

查看当前的查询缓存大小:

mysql> SHOW VARIABLES LIKE 'query_cache%';
+------------------------------+---------+
| Variable_name                | Value   |
+------------------------------+---------+
| query_cache_limit            | 1048576 |          //超过此大小则不再缓存
| query_cache_min_res_unit     | 4096    |
| query_cache_size             | 1048576 |          //缓存空间的大小
| query_cache_type             | OFF     |
| query_cache_wlock_invalidate | OFF     |
+------------------------------+---------+
5 rows in set (0.00 sec)

查看当前的查询缓存统计数据:

mysql> SHOW GLOBAL STATUS LIKE 'qcache%';
+-------------------------+---------+
| Variable_name           | Value   |
+-------------------------+---------+
| Qcache_free_blocks      | 1       |
| Qcache_free_memory      | 1031368 |              //缓存中的空闲内存
| Qcache_hits             | 0       |
| Qcache_inserts          | 0       |
| Qcache_lowmem_prunes    | 0       |
| Qcache_not_cached       | 100       |              //不适合缓存的数量
| Qcache_queries_in_cache | 0       |
| Qcache_total_blocks     | 1       |
+-------------------------+---------+
8 rows in set (0.00 sec)

步骤五:关于MySQL状态和相关变量的查看

1)查看服务器的相关状态值(运行中动态变化)

使用SHOW GLOBAL STATUS语句,可结合LIKE条件做模糊过滤。

默认有400多个状态值:

mysql> SHOW GLOBAL STATUS\G
*************************** 1. row ***************************
Variable_name: Aborted_clientsValue: 0
*************************** 2. row ***************************
Variable_name: Aborted_connectsValue: 0
*************************** 3. row ***************************
Variable_name: Binlog_cache_disk_useValue: 0
*************************** 4. row ***************************
Variable_name: Binlog_cache_useValue: 0
*************************** 5. row ***************************
Variable_name: Binlog_stmt_cache_disk_useValue: 0
.. ..                                              //省略中间的大量状态值
.. ..
*************************** 435. row ***************************
Variable_name: Threads_connectedValue: 1
*************************** 436. row ***************************
Variable_name: Threads_createdValue: 1
*************************** 437. row ***************************
Variable_name: Threads_runningValue: 1
*************************** 438. row ***************************
Variable_name: UptimeValue: 5322
*************************** 439. row ***************************
Variable_name: Uptime_since_flush_statusValue: 2283
439 rows in set (0.00 sec)

2)查看服务器的运行选项(一般为静态限制,可通过my.cnf文件配置,或SET修改)

使用SHOW VARIABLES语句,也可结合LIKE条件做模糊过滤。

默认也有400多个(接近500个)配置选项:

mysql> SHOW VARIABLES\G
*************************** 1. row ***************************
Variable_name: auto_increment_incrementValue: 1
*************************** 2. row ***************************
Variable_name: auto_increment_offsetValue: 1
*************************** 3. row ***************************
Variable_name: autocommitValue: ON
*************************** 4. row ***************************
Variable_name: automatic_sp_privilegesValue: ON
*************************** 5. row ***************************
Variable_name: back_logValue: 80
.. ..                                              //省略中间的大量状态值
.. ..
*************************** 486. row ***************************
Variable_name: version_commentValue: MySQL Cluster Community Server (GPL)
*************************** 487. row ***************************
Variable_name: version_compile_machineValue: x86_64
*************************** 488. row ***************************
Variable_name: version_compile_osValue: Linux
*************************** 489. row ***************************
Variable_name: wait_timeoutValue: 28800
*************************** 490. row ***************************
Variable_name: warning_countValue: 0
490 rows in set (0.01 sec)

转载于:https://blog.51cto.com/13735155/2134619

MySQL-MMM架构部署(有图)相关推荐

  1. mysql MMM架构

    mysql mmm架构 一台master坏了怎么办 一.agent进程 [root@master2mysql-mmm-2.2.1]#/etc/init.d/mysql-mmm-agentstart D ...

  2. MySQL 高级 ———— MySQL逻辑架构图简介

    引言 本篇文章介绍MySQL的逻辑架构图. MySQL并不完美,但足够灵活,能够适应高要求环境.MySQL不仅可以嵌入到应用程序中,同时也可以支持数据仓库.内容搜索.和部署软件.高可用的冗余系统.在线 ...

  3. MySQL 半同步复制+MMM架构

    介绍 上篇文章介绍了MMM架构的实现方法,但是上篇文章的MMM方案的复制是异步复制,异步复制的主要问题在于当主从存在延时时如果主机出现了故障导致了主从切换时这时将会存在数据丢失:mysql为了解决异步 ...

  4. mysql mmm vip_MySQL MMM架构看不到vip地址

    自己搭建好MySQL MMM(Master-Master Replication Manager)高可用架构后看不到vip地址,经过在网上找了大量的文章和自己平时的观察终于发现找出vip地址的方法了, ...

  5. Keepalived+Haproxy+Mysql(双主)高可用架构部署

    Keepalived+Haproxy+Mysql(双主)高可用架构部署 一.背景 公司原部署的Mysql架构为keepalived+Mysql双主,但是这个架构有个缺陷是所有的读写请求都在一台机器上( ...

  6. 基于java基于微服务架构的设备管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于微服务架构的设备管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于微服务架构的设备管理系统的设计与实现计算机毕业设计源码+系统+lw文 ...

  7. 基于java基于微服务架构的在线音乐平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于微服务架构的在线音乐平台计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于微服务架构的在线音乐平台计算机毕业设计源码+系统+lw文档+mysql数据库+调 ...

  8. 一文讲清,MySQL主从架构

    MySQL在生成环境中,如果是单机版的部署方式,就会有很大的可用性问题,MySQL提供了一套主从复制的架构,以提高其可用性. MySQL主从复制架构,就是部署两台机器,一台机器上部署的MySQL是ma ...

  9. MySQL MMM多主多从搭建

    一.MySQL高可用简介 MMM(Master-Master Replication mananger for mysql),由一个管理端(monitor)和多个代理端(agent)构成.通过MMM可 ...

最新文章

  1. Linux系统进程类型有哪些?进程状态有哪几种?常见的进程有哪些?
  2. Python Tkinter 常用控件空间位置摆放
  3. VTK:可视化之MovableAxes
  4. mysql数据库的服务无法启动_mysql5数据库服务无法启动
  5. java的compare to(),java – compare()和compareTo()之间有什么区别?
  6. 字符集 ISO-8859-1(3)
  7. Nginx的静态文件合并请求,加快网站的加载速度
  8. STP生成树——安全特性——单向环路故障——loopguard技术详细讲解、网线分类(附图,建议PC观看)
  9. ALSA架构应用程序aplay及amixer调用关系(应用层到内核驱动)
  10. 软件测试所需要掌握的技能
  11. 如果在遨游浏览器里设置Bing(必应)搜索为默认搜索
  12. android 开发之activity 启动流程《一》
  13. 格兰杰因果检验准备-平稳性检验-Eviews
  14. 使用计算机自适应测验大型测验,计算机自适应测验方法与流程
  15. 猫眼网历史日票房数据爬取
  16. 正版win10如何重装系统|win10正版重装系统教程
  17. 缺少msvc140.dll解决办法,缺少任意dll文件的解决办法
  18. excel: 单元格格式修改及绘图
  19. 4.0 ipu_soc,ipu_channel_t ,ipu_channel_params_t结构体详解
  20. 机器学习——K近邻算法及乳腺癌检测分类

热门文章

  1. 【转】hex和bin文件格式的区别
  2. note for git
  3. 【Core Spring】二、装配beans
  4. WPF MultiSelect模式下ListBox 实现多个ListBoxItem拖拽
  5. css字体设置奇怪问题
  6. hdu4038贪心(最快上升倍率,好题)
  7. POJ 2752 同一个串的前后串
  8. 【数字信号处理】傅里叶变换性质 ( 傅里叶变换频移性质 | 证明过程 )
  9. 【Flutter】Flutter 混合开发 ( Flutter 与 Native 通信 | Android 端实现 MethodChannel 通信 )
  10. 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )