当前位置:文档之家› 开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制-20170808

开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制-20170808

开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制-20170808
开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制-20170808

开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制

1.前言

上一篇讲述了如何在CentOS7下编译安装Nginx-1.12.0并如何配置反向代理,本篇将讲述如何编译安装MySQL5.7.18并配置多实例和主从复制。

2.准备

2.1下载MySQL5.7.18源码

注意最新版本的MySQL需要Boost才能编译安装,在MySQL提供的下载中有不带boost的源码,还有带boost的源码,如果下载不带boost的源码还需要再去下载boost源码,为省事起见,建议下载带boost的源码,下载地址:https://https://www.doczj.com/doc/7c8344189.html,//Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz (可直接使用wget下载)

注:可以打开网页来下载,网页地址为:https://https://www.doczj.com/doc/7c8344189.html,/downloads/mysql/,当前最新版本为5.7.18,在“Select Operating System:”处选择“Source Code”,然后在图中选择“Generic Linux (Architecture Independent), Compressed TAR Archive Includes Boost Headers 5.7.18 58.8M (mysql-boost-5.7.18.tar.gz)”,如下图所示:

2.2安装epel

EPEL的全称叫Extra Packages for Enterprise linux 。EPEL是由Fedora 社区打造,为RHEL 及衍生发行版如CentOS、Scientific Linux 等提供高质量软件包的项目。装上了EPEL之后,就相当于添加了一个第三方源。

在编译MySQL过程中需要一些依赖插件,安装epel后可直接通过yum install 来安装。

执行命令:

yum install epel-release –y

2.3安装cmake

不同于nginx使用make来编译和安装,MySQL使用CMake来编译和安装,安装命令:

yum install cmake –y

为将来方便还可以把相关的也一并安装了:

yum install autoconf automake libtool -y

2.4安装可能依赖库

yum install krb5 krb5-devel libidn libidn-devel openssl openssl-devel -y

yum install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devdel -y

yum install zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel -y

yum install ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel -y

yum install perl-Data_dumper python-devel -y

3.编译及安装

3.1解压文件

假定mysql-boost-5.7.18.tar.gz文件位于/root/目录下(不管是通过wget直接下载的还是通过下载工具上传的),首先解压文件:

tar zxvf /root/mysql-boost-5.7.18.tar.gz

cd /root/mysql-5.7.18

3.2配置、编译及安装

首先进行参数配置,命令如下:

cmake \

-DWITH_BOOST=boost \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 \

-DMYSQL_DATADIR=/usr/local/mysql-5.7.18/data \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_EXAMPLE_STORAGE_ENGINE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DENABLED_LOCAL_INFILE=1 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

-DWITH_ZLIB=bundled \

-DWITH_READLINE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DWITH_DEBUG=0 \

-DWITH_SSL=system

然后编译和安装:

make && make install

这里要说明几点:

(1)当命令或参数过长时,为了便于直观显示,可以在其后加上”\”,当然”\”与正常命令之间需要有空格;

(2) -DWITH_BOOST=boost 指定boost类库的位置;

(3) -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 指定安装位置;

在上述配置过程中可能会有出错信息,根据出错信息调整响应参数或者安装缺失的类库,直到提示可以安装为止。然后执行make进行编译,编译过程中没有错误的再执行make install安装,由于源代码体积有点大,编译耗费的时间比较长,在本人2G内存、4核的虚拟机上编译时间超过半小时以上。

安装成功之后,在/usr/local/mysql-5.7.18下就是安装后的文件目录。

注:以上编译是针对多实例的,如果是单实例,则可采用以下配置:

cmake \

-DWITH_BOOST=boost \

-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 \

-DMYSQL_DATADIR=/usr/local/mysql-5.7.18/data \

-DMYSQL_TCP_PORT=3306 \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DWITH_FEDERATED_STORAGE_ENGINE=1 \

-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \

-DWITH_EXAMPLE_STORAGE_ENGINE=1 \

-DWITH_PARTITION_STORAGE_ENGINE=1 \

-DWITH_READLINE=1 \

-DENABLED_LOCAL_INFILE=1 \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \

-DWITH_ZLIB=bundled \

-DWITH_READLINE=1 \

-DWITH_EMBEDDED_SERVER=1 \

-DWITH_DEBUG=0 \

-DWITH_SSL=system

4.数据库初始化

4.1创建多数据库实例配置文件https://www.doczj.com/doc/7c8344189.html,f文件

https://www.doczj.com/doc/7c8344189.html,f文件是MySQL的配置文件,在MySQL启动过程中会读取里面的配置信息。

在本篇中不满足于单实例的配置,本篇将利用3306和3307两个端口创建两个实例,因此需要在/etc/目录下创建https://www.doczj.com/doc/7c8344189.html,f文件。

首先创建文件夹:

mkdir –p /usr/local/mysql-5.7.18/data/3306/data

mkdir –p /usr/local/mysql-5.7.18/data/3307/data

/usr/local/mysql-5.7.18/data/3306文件夹用于存放监听3306端口实例的相关配置信息、执行脚本和数据,/usr/local/mysql-5.7.18/data/3307文件夹用于存放监听3307端口实例的相关配置信息、执行脚本和数据。

因为mysql数据库将以nginx这个用户来运行,因此首先需要创建这个账户:

useradd mysql -s /sbin/nologin –m

/etc/https://www.doczj.com/doc/7c8344189.html,f的内容:

[mysqld_multi]

mysqld = /usr/local/mysql-5.7.18/bin/mysqld_safe mysqladmin = /usr/local/mysql-5.7.18/bin/mysqladmin

user = mysql

password = !QAZ2wsx3edc

[mysqld3306]

server-id = 1

log-bin= /usr/local/mysql-5.7.18/data/3306/mysql-bin

user = mysql

pid-file = /usr/local/mysql-5.7.18/data/3306/mysql.pid socket = /usr/local/mysql-5.7.18/data/3306/mysql.sock

log-error = /usr/local/mysql-5.7.18/data/3306/mysqld.log

port = 3306

basedir = /usr/local/mysql-5.7.18

datadir = /usr/local/mysql-5.7.18/data/3306/data

tmpdir = /tmp

open_files_limit=1024

external-locking = false

character-set-server=utf8

#default-storage-engine=MyISAM

default-storage-engine=INNODB

explicit_defaults_for_timestamp=true

bind-address = 0.0.0.0

max_allowed_packet = 8M

thread_stack = 192K

thread_cache_size = 8

max_connections = 800

max_connect_errors = 300

query_cache_limit = 1M

query_cache_size = 2M

join_buffer_size=1M

sort_buffer_size=1M

long_query_time = 1

relay-log = /usr/local/mysql-5.7.18/data/3306/relay-bin

relay-log-info-file =/usr/local/mysql-5.7.18/data/3306/https://www.doczj.com/doc/7c8344189.html, binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

key_buffer_size=16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors =1032,1062

replicate-ignore-db = mysql

innodb_buffer_pool_size = 32M

innodb_data_file_path = ibdata1:12M:autoextend

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 2M

innodb_log_file_size = 4M

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table = 0

[mysqld3307]

server-id = 2

user = mysql

pid-file = /usr/local/mysql-5.7.18/data/3307/mysql.pid socket = /usr/local/mysql-5.7.18/data/3307/mysql.sock

log-error = /usr/local/mysql-5.7.18/data/3307/mysqld.log

port = 3307

basedir = /usr/local/mysql-5.7.18

datadir = /usr/local/mysql-5.7.18/data/3307/data

tmpdir = /tmp

open_files_limit=1024

external-locking = false

character-set-server=utf8

#default-storage-engine=MyISAM

default-storage-engine=INNODB

explicit_defaults_for_timestamp=true

bind-address = 0.0.0.0

max_allowed_packet = 8M

thread_stack = 192K

thread_cache_size = 8

max_connections = 800

max_connect_errors = 300

query_cache_limit = 1M

query_cache_size = 2M

join_buffer_size=1M

sort_buffer_size=1M

long_query_time = 1

relay-log = /usr/local/mysql-5.7.18/data/3307/relay-bin

relay-log-info-file =/usr/local/mysql-5.7.18/data/3307/https://www.doczj.com/doc/7c8344189.html, binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

key_buffer_size=16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors =1032,1062

replicate-ignore-db = mysql

innodb_buffer_pool_size = 32M

innodb_data_file_path = ibdata1:12M:autoextend

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 2M

innodb_log_file_size = 4M

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table = 0

注:在上述文件中配置了两个MySQL实例,并且在3306及3307配置中都提到了mysqld.log这个文件,这个文件是用来记录MySQL启动过程的信息的,不过悲催的是如果这个文件不存在,那么是会启动出错的,可又没有地方可以查看错误,因此需要提前创建好文件并设置权限。

touch /usr/local/mysql-5.7.18/data/3306/mysqld.log

touch /usr/local/mysql-5.7.18/data/3307/mysqld.log

chmod 766 /usr/local/mysql-5.7.18/data/3306/mysqld.log

chmod 766 /usr/local/mysql-5.7.18/data/3307/mysqld.log

注:如果嫌每次输入完整的文件路径麻烦可以切换到程序的安装目录,甚至还可以创建软链接,所谓的软链接有点类似于Windows下的快捷方式,如ln –s /usr/local/mysql-5.7.18 /usr/local/mysql就是创建了mysql-5.7.18的软链接,甚至如果你喜欢,还可以在用户根目录下创建软链接,如:ln –s /usr/local/mysql-5.7.18 /usr/local/mysql。

通过命令查看,如下图所示是在SSH客户端中的效果:

上面mysql,nginx及tomcat都是创建的软链接(文件属性的第一个字符是”l”表明是软链接),其对应的真实路径

分别为当前路径下的mysql-5.7.18、nginx-1.12.0及apache-tomcat-8.5.15目录。注:针对单实例的https://www.doczj.com/doc/7c8344189.html,f文件:

[client]

port = 3306

socket = /usr/local/mysql-5.7.18/mysql.sock

[mysqld_safe]

log-error = /usr/local/mysql-5.7.18/mysql.err

pid-file = /usr/local/mysql-5.7.18/mysql.pid

[mysqld]

#

# * Basic Settings

#

server-id = 1

log-bin= /usr/local/mysql-5.7.18/mysql-bin

user = mysql

pid-file = /usr/local/mysql-5.7.18/mysql.pid

socket = /usr/local/mysql-5.7.18/mysql.sock

port = 3306

basedir = /usr/local/mysql-5.7.18

datadir = /usr/local/mysql-5.7.18/data

tmpdir = /tmp

open_files_limit=1024

external-locking = false

character-set-server=utf8

#default-storage-engine=MyISAM

default-storage-engine=INNODB

bind-address = 0.0.0.0

max_allowed_packet = 8M

thread_stack = 192K

thread_cache_size = 8

max_connections = 800

max_connect_errors = 300

#table_cache = 64

#thread_concurrency = 10

query_cache_limit = 1M

query_cache_size = 2M

join_buffer_size=1M

sort_buffer_size=1M

long_query_time = 1

relay-log = /usr/local/mysql-5.7.18/relay-bin

relay-log-info-file =/usr/local/mysql-5.7.18/https://www.doczj.com/doc/7c8344189.html,

binlog_cache_size = 1M

max_binlog_cache_size = 1M

max_binlog_size = 2M

key_buffer_size=16M

read_buffer_size = 1M

read_rnd_buffer_size = 1M

bulk_insert_buffer_size = 1M

lower_case_table_names = 1

skip-name-resolve

slave-skip-errors =1032,1062

replicate-ignore-db = mysql

#innodb_additional_mem_pool_size = 4M

innodb_buffer_pool_size = 32M

innodb_data_file_path = ibdata1:12M:autoextend

#innodb_file_io_threads = 4

innodb_thread_concurrency = 8

innodb_flush_log_at_trx_commit = 2

innodb_log_buffer_size = 2M

innodb_log_file_size = 4M

#innodb_log_files_in_groups = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

innodb_file_per_table = 0

[mysqldump]

quick

quote-names

max_allowed_packet = 16M

4.2创建MySQL的启动文件

在这里使用MySQL提供的用于多实例启动的文件,这个文件位于/usr/local/mysql-5.7.18/support-files目录下,文件名为mysqld_multi.server,首先将其复制到/etc/init.d/目录,命令如下:

cp /usr/local/src/mysql-5.1.60/support-files/mysqld_multi.server /etc/init.d/mysqld_multi.server

然后修改/etc/init.d/mysqld_multi.server文件如下:

#!/bin/sh

#

# A simple startup script for mysqld_multi by Tim Smith and Jani Tolonen.

# This script assumes that https://www.doczj.com/doc/7c8344189.html,f file exists either in /etc/https://www.doczj.com/doc/7c8344189.html,f or

# /root/https://www.doczj.com/doc/7c8344189.html,f and has groups [mysqld_multi] and [mysqldN]. See the

# mysqld_multi documentation for detailed instructions.

#

# This script can be used as /etc/init.d/mysql.server

#

# Comments to support chkconfig on RedHat Linux

# chkconfig: 2345 64 36

# description: A very fast and reliable SQL database engine.

#

# Version 1.0

#

basedir=/usr/local/mysql-5.7.18

bindir=/usr/local/mysql-5.7.18/bin

if test -x $bindir/mysqld_multi

then

mysqld_multi="$bindir/mysqld_multi";

else

echo "Can't execute $bindir/mysqld_multi from dir $basedir";

exit;

fi

case "$1" in

'start' )

"$mysqld_multi" start $2

;;

'stop' )

"$mysqld_multi" stop $2

;;

'report' )

"$mysqld_multi" report $2

;;

'restart' )

"$mysqld_multi" stop $2

"$mysqld_multi" start $2

;;

*)

echo "Usage: $0 {start|stop|report|restart}" >&2

;;

esac

注意:

上述启动文件中关闭实例没有采用kill进程的办法,而是使用mysqladmin shutdown的方法,这个方法需要root级别用户的账号和密码,因此需要控制这个文件的查看和编辑权限。

需要给两个文件设置执行权限。

chmod 755 /usr/local/mysql-5.7.18/data/3306/mysql

chmod 755 /usr/local/mysql-5.7.18/data/3307/mysql

此外,因为MySQL的两个实例均以MySQL用户运行,为保证有足够的权限,设置/usr/local/mysql-5.7.18/文件夹的用户和用户组属性:

chown –R mysql:mysql /usr/local/mysql-5.7.18

注:单实例版的MySQL启动文件(文件全路径为/lib/systemd/system/mysql.service):

[Unit]

Description=MySQL Server 5.7.18

After=network.target

[Service]

ExecStart=/usr/local/mysql-5.7.18/bin/mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/https://www.doczj.com/doc/7c8344189.html,f --datadir=/usr/local/mysql-5.7.18 --socket=/usr/local/mysql-5.7.18/mysqld.sock User=mysql Group=mysql WorkingDirectory=/usr/local/mysql-5.7.18

[Install]

WantedBy=multi-user.target

4.3执行初始化

网上有很多例子讲解MySQL初始化都是利用MySQL安装目录下的bin目录中的mysql_install_db来执行,但是这个官方不建议的,官方建议使用mysqld来初始化。

下面的脚本可以执行但不建议使用(且本人发现执行后不知道root用户默认密码):

/usr/local/mysql-5.7.18/bin/mysql_install_db \

--basedir=/usr/local/mysql-5.7.18 \

--datadir=/usr/local/mysql-5.7.18/data/3306/data \

--user=mysql

/usr/local/mysql-5.7.18/bin/mysql_install_db \

--basedir=/usr/local/mysql-5.7.18 \

--datadir=/usr/local/mysql-5.7.18/data/3307/data \

--user=mysql

下面的脚本是官方建议的:

/usr/local/mysql-5.7.18/bin/mysqld --initialize \

--basedir=/usr/local/mysql-5.7.18 \

--datadir=/usr/local/mysql-5.7.18/data/3306/data \

--user=mysql

/usr/local/mysql-5.7.18/bin/mysqld --initialize \

--basedir=/usr/local/mysql-5.7.18 \

--datadir=/usr/local/mysql-5.7.18/data/3307/data \

--user=mysql

注:单实例版的初始化命令:

/usr/local/mysql-5.7.18/bin/mysqld --initialize \

--basedir=/usr/local/mysql-5.7.18 \

--datadir=/usr/local/mysql-5.7.18/data \

--user=mysql

上面的脚本如果执行成功,最后一句里有root用户的初始密码,在本人执行上述两条命令时得到结果如下:

其中关键的两句(每个实例初始化都有类似一句):

2017-06-09T13:45:09.590690Z 1 [Note] A temporary password is generated for root@localhost: GdlR7&+w

2017-06-09T13:46:48.721250Z 1 [Note] A temporary password is generated for root@localhost: Z>B#5IfIFAfj

上述密码是随机的,请记住一会登录系统后更改临时密码。

4.4启动MySQL实例和登录

4.4.1启动实例

可以通过mysqld_multi来启动实例,这个文件位于/usr/local/mysql-5.7.18/bin目录下,可以将这个路径添加到/etc/profile和/etc/bashrc文件中的PATH变量中。

在前面的https://www.doczj.com/doc/7c8344189.html,f文件中我们添加了两个实例,名称分别为mysqld3306和mysqld3307,并且针对多实例的配置文件https://www.doczj.com/doc/7c8344189.html,f在/etc目录,因此启动3306对应实例的命令如下:

/usr/local/mysql-5.7.18/bin/mysqld_multi --defaults-extra-file=/etc/https://www.doczj.com/doc/7c8344189.html,f start 3306

如果要同时启动3306和3307两个监听实例,则执行如下命令:

/usr/local/mysql-5.7.18/bin/mysqld_multi --defaults-extra-file=/etc/https://www.doczj.com/doc/7c8344189.html,f start 3306,3307

可以通过如下命令查看各实例的启动状态:

/usr/local/mysql-5.7.18/bin/mysqld_multi --defaults-extra-file=/etc/https://www.doczj.com/doc/7c8344189.html,f report

以下是在本机上执行上面的命令返回的结果:

[root@it ~]# /usr/local/mysql-5.7.18/bin/mysqld_multi --defaults-extra-file=/etc/https://www.doczj.com/doc/7c8344189.html,f report

Reporting MySQL servers

MySQL server from group: mysqld3306 is running

MySQL server from group: mysqld3307 is running

这时也可以通过netstat查看实例是否启动成功,如果启动成功相应的端口就会处于监听状态。

[root@localhost ~]# netstat -lntp | grep 330

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

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 3817/mysqld

从执行结果来看,3306和3307两个端口对应的MySQL实例均已启动。

当然,你也可以通过上述命令来重启或者停止MySQL实例,如停止:

/usr/local/mysql-5.7.18/bin/mysqld_multi --defaults-extra-file=/etc/https://www.doczj.com/doc/7c8344189.html,f stop 3306,3307

如果启动不成功,可以通过相应的错误日志来排除错误,如下就是用tail来查看错误日志:

[root@localhost ~]# tail /usr/local/mysql-5.7.18/data/3306/mysqld.log

2017-06-10T14:41:51.366238Z 0 [Warning] 'db' entry 'sys mysql.sys@localhost' ignored in --skip-name-resolve mode. 2017-06-10T14:41:51.366625Z 0 [Warning] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode. 2017-06-10T14:41:51.371787Z 0 [Warning] 'tables_priv' entry 'sys_config mysql.sys@localhost' ignored in --skip-name-resolve mode.

2017-06-10T14:41:51.416687Z 0 [Note] Event Scheduler: Loaded 0 events

2017-06-10T14:41:51.416855Z 0 [Note] /usr/local/mysql-5.7.18/bin/mysqld: ready for connections.

Version: '5.7.18-log' socket: '/usr/local/mysql-5.7.18/data/3306/mysql.sock' port: 3306 Source distribution

2017-06-10T14:41:51.416862Z 0 [Note] Executing 'SELECT * FROM INFORMATION_SCHEMA.TABLES;' to get a list of tables using the deprecated partition engine. You may use the startup option '--disable-partition-engine-check' to skip this check. 2017-06-10T14:41:51.416864Z 0 [Note] Beginning of list of non-natively partitioned tables

2017-06-10T14:41:51.473660Z 0 [Note] End of list of non-natively partitioned tables

2017-06-10T14:42:07.539386Z 3 [Note] Start binlog_dump to master_thread_id(3) slave_server(2), pos(mysql-bin.000001, 2654)

4.4.2登录实例

如果是单实例可以通过mysql -u user -p来登录,但这里有了两个实例,所以登录方式有些区别。

登录到3306端口对应的实例:

/usr/local/mysql-5.7.18/bin/mysql -u root -p -S /usr/local/mysql-5.7.18/data/3306/mysql.sock

登录到3307端口对应的实例:

/usr/local/mysql-5.7.18/bin/mysql -u root -p -S /usr/local/mysql-5.7.18/data/3307/mysql.sock

以下是登录3306实例的过程:

[root@localhost ~]# cd /usr/local/mysql-5.7.18

[root@localhost mysql-5.7.18]# ./bin/mysql -u root -p -S ./data/3306/mysql.sock

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connection id is 4

Server version: 5.7.18

在此过程中需要输入root的密码,root的密码在初始化阶段时系统随机生成了,可见“执行初始化”一节中描述:2017-06-09T13:45:09.590690Z 1 [Note] A temporary password is generated for root@localhost: GdlR7&+w

2017-06-09T13:46:48.721250Z 1 [Note] A temporary password is generated for root@localhost: Z>B#5IfIFAfj

其中GdlR7&+w和Z>B#5IfIFAfj分别是3306和3307实例对应的随机密码,初次登录过程中需要输入。

登录成功后,如果再执行其它语句时会得到如下提示:

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

因为我们没有改系统为root账户生成的随机密码,在此之前是不能进行任何操作的,可以通过如下命令更改:mysql> SET PASSWORD = PASSWORD('your_password');

Query OK, 0 rows affected (0.03 sec)

在实际执行过程中请将your_password更改为自己的密码。改完之后记得改3306和3307两个启动文件中的用户密码哦,否则stop命令不会生效的。

至此,MySQL数据库已完成初始化和初步配置。在实际过程中由于root用户的权限过大、且默认情况下只能在服务器上登录,为了安全一般会创建其它较小权限的用户,在这里为了演示方便省却了这个操作。

5.设置MySQL主从同步

主从同步,也称master-slave,是开发过程中常见的提高程序性能的办法。通常情况下在主数据库服务器写入数据,查询数据的时候是在从服务器,主从服务器之间通过同步机制来保持一致,虽然主从数据库的一致性是存在一定时间差的,但因为这个时间差很小所以在一些对时间不是非常敏感的业务场景下被认为是实时一致的。在大多数主流数据库中都是可以通过配置来实现主从同步、读写分离的。

这里就以刚刚配置起来的两个数据实例来演示如何实现主从同步的,步骤有如下:

(1)主数据库实例设置server-id和开启bin-log;

(2)主数据库实例创建用于同步的账号;

(3)从数据库实例设置server-id;

(4)从数据库实例配置同步参数;

(5)从数据库实例启动同步开关。

5.1主数据库实例设置server-id和开启bin-log

其实在上面的配置文件里已经配置了server-id和bin-log,就在/etc/https://www.doczj.com/doc/7c8344189.html,f文件的[mysqld3306]节点处:

[mysqld3306]

server-id = 1

log-bin= /usr/local/mysql-5.7.18/data/3306/mysql-bin

另外还需要注意的是在这个https://www.doczj.com/doc/7c8344189.html,f配置文件中还有一句:

replicate-ignore-db = mysql

它的意思是在进行主从同步时忽略mysql这个库,因为mysql库主要存放账号及授权信息的,不同数据库实例账号和授权信息不同的可能性极大,因此没有必要同步这个库。

通过如下命令可以快速查看是否已经正确配置:

[root@localhost ~]# egrep "server-id|log-bin" /usr/local/mysql-5.7.18/data/3306/https://www.doczj.com/doc/7c8344189.html,f

server-id = 1

log-bin= /usr/local/mysql-5.7.18/data/3306/mysql-bin

server-id = 2

在数据库中也可以查看:

mysql> show variables like "server_id";

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| server_id | 1 |

+---------------+-------+

1 row in set (0.00 sec)

mysql> show variables like "log_bin";

+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| log_bin | ON |

+---------------+-------+

1 row in set (0.00 sec)

同时,这里也查看一下主数据库的状态:

mysql> show master status \G;

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

File: mysql-bin.000003

Position: 154

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

ERROR:

No query specified

这里:File和Position的值是两个很重要的参数,这是从数据库下次同步时的起始位置。

5.2主数据库实例创建用于同步的账号

在主数据库创建一个replication账号用于从主库同步数据到从库,创建replication账号的语句如下:

grant replication slave on *.* to 'replication'@'%' identified by 'your_password';flush privileges;

在实际执行时请将your_password改为自己的密码,执行这个SQL语句后就会在mysql库中的user表中创建一个名为replication的用户,可以通过SQL语句查看:

mysql> show grants for "replication"@"%";

+-----------------------------------------------------+

| Grants for replication@% |

+-----------------------------------------------------+

| GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%' |

+-----------------------------------------------------+

1 row in set (0.00 sec)

5.3从数据库实例设置server-id

同样,其实在上面的配置文件里已经配置了server-id和bin-log,就在/etc/https://www.doczj.com/doc/7c8344189.html,f文件的[mysqld3307]节点处:[mysqld3307]

server-id = 2

注意:在一个主从关系群中server-id是唯一的,另外在由于从数据库不向其它库同步数据,因此没有开启bin-log。这里也通过egrep查看一下:

[root@localhost ~]# egrep "server-id|log-bin" /etc/https://www.doczj.com/doc/7c8344189.html,f

server-id = 1

log-bin= /usr/local/mysql-5.7.18/data/3306/mysql-bin

server-id = 2

5.4从数据库实例配置同步参数

登录3307端口对应的实例:

cd /usr/local/mysql-5.7.18

./bin/mysql -u root -p -S ./data/3307/mysql.sock

然后执行以下语句:

CHANGE MASTER TO \

MASTER_HOST='127.0.0.1', \

MASTER_PORT=3306, \

MASTER_USER='replication', \

MASTER_PASSWORD='your_password', \

MASTER_LOG_FILE='mysql-bin.000003', \

MASTER_LOG_POS=154;

说明:

MASTER_HOST为主服务器IP或主机名;

MASTER_PORT为主服务器端口;

MASTER_USER为主服务器上用于同步的数据库账户名;

MASTER_PASSWORD为主服务器上用于同步的数据库账户对应的密码;

MASTER_LOG_FILE为当前bin-log日志文件名;

MASTER_LOG_POS为当前偏移量;

其中MASTER_LOG_FILE和MASTER_LOG_POS可以在主数据库上执行”show master status \G;”SQL语句来获得,见本文“主数据库实例设置server-id和开启bin-log”一节。

5.5从数据库实例启动同步开关

登录从数据库执行”start slave”即可。

在本篇中由于连个数据库都是刚刚初始化的,所以数据都是一致的。在实际情况中,需要先将两个数据库实例中的除mysql库之外的数据一致后才可启动同步,否则两个库中的就会不一致。

这里我们来检查一下效果:

在主库中创建一个数据库,如下:

mysql> create database zhoufoxcn;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

| zhoufoxcn |

+--------------------+

5 rows in set (0.01 sec)

然后在从库中查看数据库的情况:

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| sys |

| zhoufoxcn |

+--------------------+

5 rows in set (0.00 sec)

可见主库的数据被自动同步到从库了,这时再在主库中删除zhoufoxcn这个库,可以看到从库中也自动删掉了。

这时在主库查看状态:

mysql> show master status \G;

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

File: mysql-bin.000003

Position: 488

Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set:

1 row in set (0.00 sec)

ERROR:

No query specified

在从库查看状态:

mysql> show slave status \G;

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

Slave_IO_State: Waiting for master to send event

Master_Host: 127.0.0.1

Master_User: replication

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000003

Read_Master_Log_Pos: 488

Relay_Log_File: relay-bin.000008

Relay_Log_Pos: 701

Relay_Master_Log_File: mysql-bin.000003

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB: mysql

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 488

Relay_Log_Space: 1115

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_UUID: da584607-4d19-11e7-8903-080027f376f5

Master_Info_File: /usr/local/mysql-5.7.18/data/3307/data/https://www.doczj.com/doc/7c8344189.html,

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400

Master_Bind:

Last_IO_Error_Timestamp:

Last_SQL_Error_Timestamp:

Master_SSL_Crl:

Master_SSL_Crlpath:

Retrieved_Gtid_Set:

Executed_Gtid_Set:

Auto_Position: 0

Replicate_Rewrite_DB:

Channel_Name:

Master_TLS_Version:

1 row in set (0.00 sec)

ERROR:

No query specified

可以看出通过配置,两台数据库能够自动同步数据了。

6.总结

本篇主要讲述了如何从MySQL官方网站下载源代码通过编译和安装,然后配置成多个实例运行,在最后还讲解了如何配置MySQL数据库主从同步。在实际情况中,可能有人在用MariaDB了,这是原MySQL开发人员在Oracle收购了Sun之后(Sun收购了MySQL),担心Oracle不再继续开源MySQL而开发的一套开源数据系统,它们有很多相似性,在本篇没有涉及。另外,本篇没有涉及的还有通过mysqld_multi.server来设置将MySQL随系统启动。

Linux内核修改与编译图文教程

Linux 内核修改与编译图文教程 1

1、实验目的 针对Ubuntu10.04中,通过下载新的内核版本,并且修改新版本内核中的系统调用看,然后,在其系统中编译,加载新内核。 2、任务概述 2.1 下载新内核 https://www.doczj.com/doc/7c8344189.html,/ 2.2 修改新内核系统调用 添加新的系统调用函数,用来判断输入数据的奇偶性。 2.3 进行新内核编译 通过修改新版内核后,进行加载编译。最后通过编写测试程序进行测试 3、实验步骤 3.1 准备工作 查看系统先前内核版本: (终端下)使用命令:uname -r 2

3.2 下载最新内核 我这里使用的内核版本是 3.3 解压新版内核 将新版内核复制到“/usr/src”目录下 在终端下用命令:cd /usr/src进入到该文件目录 解压内核:linux-2.6.36.tar.bz2,在终端进入cd /usr/src目录输入一下命令: bzip2 -d linux-2.6.36.tar.bz2 tar -xvf linux-2.6.36.tar 文件将解压到/usr/src/linux目录中 3

使用命令: ln -s linux-2.6.36 linux 在终端下输入一下命令: sudo apt-get install build-essential kernel-package libncurses5-dev fakeroot sudo aptitude install libqt3-headers libqt3-mt-dev libqt3-compat-headers libqt3-mt 4

如何自行编译一个Linux内核的详细资料概述

如何自行编译一个Linux内核的详细资料概述 曾经有一段时间,升级Linux 内核让很多用户打心里有所畏惧。在那个时候,升级内核包含了很多步骤,也需要很多时间。现在,内核的安装可以轻易地通过像 apt 这样的包管理器来处理。通过添加特定的仓库,你能很轻易地安装实验版本的或者指定版本的内核(比如针对音频产品的实时内核)。 考虑一下,既然升级内核如此容易,为什么你不愿意自行编译一个呢?这里列举一些可能的原因: 你想要简单了解编译内核的过程 你需要启用或者禁用内核中特定的选项,因为它们没有出现在标准选项里 你想要启用标准内核中可能没有添加的硬件支持 你使用的发行版需要你编译内核 你是一个学生,而编译内核是你的任务 不管出于什么原因,懂得如何编译内核是非常有用的,而且可以被视作一个通行权。当我第一次编译一个新的Linux 内核(那是很久以前了),然后尝试从它启动,我从中(系统马上就崩溃了,然后不断地尝试和失败)感受到一种特定的兴奋。 既然这样,让我们来实验一下编译内核的过程。我将使用Ubuntu 16.04 Server 来进行演示。在运行了一次常规的 sudo apt upgrade 之后,当前安装的内核版本是 4.4.0-121。我想要升级内核版本到 4.17,让我们小心地开始吧。 有一个警告:强烈建议你在虚拟机里实验这个过程。基于虚拟机,你总能创建一个快照,然后轻松地从任何问题中回退出来。不要在产品机器上使用这种方式升级内核,除非你知道你在做什么。 下载内核 我们要做的第一件事是下载内核源码。在 Kernel 找到你要下载的所需内核的URL。找到URL 之后,使用如下命令(我以 4.17 RC2 内核为例)来下载源码文件: wget https://git.kernel/torvalds/t/linux-4.17-rc2.tar.gz

如何安装Linux内核源代码

如何获取Linux内核源代码 下载Linux内核当然要去官方网站了,网站提供了两种文件下载,一种是完整的Linux 内核,另一种是内核增量补丁,它们都是tar归档压缩包。除非你有特别的原因需要使用旧版本的Linux内核,否则你应该总是升级到最新版本。 使用Git 由Linus领头的内核开发队伍从几年前就开始使用Git版本控制系统管理Linux内核了(参考阅读:什么是Git?),而Git项目本身也是由Linus创建的,它和传统的CVS不一样,Git是分布式的,因此它的用法和工作流程很多开发人员可能会感到很陌生,但我强烈建议使用Git下载和管理Linux内核源代码。 你可以使用下面的Git命令获取Linus内核代码树的最新“推送”版本: $ git clone git://https://www.doczj.com/doc/7c8344189.html,/pub/scm/linux/kernel/git/torvalds/linux-2.6.git 然后使用下面的命令将你的代码树与Linus的代码树最新状态同步: $ git pull 安装内核源代码 内核包有GNU zip(gzip)和bzip2格式。Bzip2是默认和首选格式,因为它的压缩比通常比gzip更好,bzip2格式的Linux内核包一般采用linux-x.y.z.tar.bz2形式的文件名,这里的x.y.z是内核源代码的具体版本号,下载到源代码包后,解压和抽取就很简单了,如果你下载的是bzip2包,运行: $ tar xvjf linux-x.y.z.tar.bz2 如果你下载的是gzip包,则运行: $ tar xvzf linux-x.y.z.tar.gz 无论执行上面哪一个命令,最后都会将源代码解压和抽取到linux-x.y.z目录下,如果你使用Git下载和管理内核源代码,你不需要下载tar包,只需要运行git clone命令,它就会自动下载和解压。 内核源代码通常都会安装到/usr/src/linux下,但在开发的时候最好不要使用这个源代码树,因为针对你的C库编译的内核版本通常也链接到这里的。 应用补丁

Linux服务器配置与管理实验报告1

实验一安装Linux操作系统 【实验目的】 了解Linux操作系统的发行版本;掌握Linux系统安装方法;掌握网络配置和网络环境测试。 【实验内容】 1.Vmware Workstation 6.0下创建Red Hat Linux虚拟机,要求虚拟机的内存为256MB或更大,硬盘为8GB或更大。 2.使用RHEL 5的ISO文件安装Linux系统。 【实验步骤】 1.硬盘和分区知识以及Linux文件系统的组织方式 (1)硬盘和分区知识 磁盘有IDE接口和SCSI接口两种。 磁盘在使用前需分区。磁盘分区有主分区、扩展分区和逻辑分区之分。一块硬盘可以有4个主分区,其中一个主分区的位置可以有一个扩展分区替换,即可以有3个主分区和一个扩展分区,且一块硬盘只能有一个扩展分区,在这个扩展分区中可以划分多个逻辑分区。(2)Linux如何表示分区 在Windows系统中使用盘符来标识不同的分区,而在linux下使用分区的设备名来标识不同的分区,设备名存放在/dev目录中。 磁盘设备名称如下: ●系统的第1块IDE接口的硬盘称为/dev/hda ●系统的第2块IDE接口的硬盘称为/dev/hdb ●系统的第1块SCSI接口的硬盘称为/dev/sda ●系统的第2块SCSI接口的硬盘称为/dev/sdb 分区使用数字编号表示: ●系统的第1块IDE接口硬盘的第1个分区称为/dev/hda1 ●系统的第1块IDE接口硬盘的第5个分区称为/dev/hda5 ●系统的第2块SCSI接口硬盘的第1个分区称为/dev/sdb1 ●系统的第2块SCSI接口硬盘的第5个分区称为/dev/sdb5 注意:数字编号1-4留给主分区或扩展分区使用,逻辑分区编号从5开始。 (3)Linux文件系统文件系统的组织方式------挂载点 Linux系统只有一个根目录,即只有一个目录树。不同磁盘的不同分区只是这个目录树的一部分,在linux中创建文件系统后(类似format),用户不能直接使用它,要挂载文件系统后才能使用。挂载文件系统首先要选择一个挂载点。 2.利用VMware Workstation 6.0 创建一台新的虚拟机

嵌入式Linux系统内核的配置、编译和烧写

实验二 嵌入式Linux系统内核的配置、编译和烧写 1.实验目的 1)掌握交叉编译的基本概念; 2)掌握配置和编译嵌入式Linux操作系统内核的方法; 3)掌握嵌入式系统的基本架构。 2.实验环境 1)装有Windows系统的计算机; 2)计算机上装有Linux虚拟机软件; 3)嵌入式系统实验箱及相关软硬件(各种线缆、交叉编译工具链等等)。 3.预备知识 1)嵌入式Linux内核的配置和裁剪方法; 2)交叉编译的基本概念及编译嵌入式Linux内核的方法; 3)嵌入式系统的基本架构。 4.实验内容和步骤 4.1 内核的配置和编译——配置内核的MMC支持 1)由于建立交叉编译器的过程很复杂,且涉及汇编等复杂的指令,在这里 我们提供一个制作好的编译器。建立好交叉编译器之后,我们需要完成 内核的编译,首先我们要有一个完整的Linux内核源文件包,目前流行 的源代码版本有Linux 2.4和Linux 2.6内核,我们使用的是Linux 2.6内核; 2)实验步骤: [1]以root用户登录Linux虚拟机,建立一个自己的工作路径(如用命令 “mkdir ‐p /home/user/build”建立工作路径,以下均采用工作路径 /home/user/build),然后将“cross‐3.3.2.tar.bz2、dma‐linux‐2.6.9.tar.gz、 dma‐rootfs.tar.gz”拷贝到工作路径中(利用Windows与虚拟机Linux 之间的共享目录作为中转),并进入工作目录; [2]解压cross‐3.3.2.tar.bz2到当前路径:“tar ‐jxvf cross‐3.3.2.tar.bz2”; [3]解压完成后,把刚刚解压后在当前路径下生成的“3.3.2”文件夹移 动到“/usr/local/arm/”路径下,如果在“/usr/local/”目录下没有“arm” 文件夹,用户创建即可; [4]解压“dma‐linux‐2.6.9.tar.gz”到当前路径下:

linux内核编译和生成makefile文件实验报告

操作系统实验报告 姓名:学号: 一、实验题目 1.编译linux内核 2.使用autoconf和automake工具为project工程自动生成Makefile,并测试 3.在内核中添加一个模块 二、实验目的 1.了解一些命令提示符,也里了解一些linux系统的操作。 2.练习使用autoconf和automake工具自动生成Makefile,使同学们了解Makefile的生成原理,熟悉linux编程开发环境 三、实验要求 1使用静态库编译链接swap.c,同时使用动态库编译链接myadd.c。可运行程序生成在src/main目录下。 2要求独立完成,按时提交 四、设计思路和流程图(如:包括主要数据结构及其说明、测试数据的设计及测试结果分析) 1.Makefile的流程图: 2.内核的编译基本操作 1.在ubuntu环境下获取内核源码 2.解压内核源码用命令符:tar xvf linux- 3.18.12.tar.xz 3.配置内核特性:make allnoconfig 4.编译内核:make 5.安装内核:make install

6.测试:cat/boot/grub/grub.conf 7.重启系统:sudo reboot,看是否成功的安装上了内核 8.详情及结构见附录 3.生成makefile文件: 1.用老师给的projec里的main.c函数。 2.需要使用automake和autoconf两个工具,所以用命令符:sudo apt-get install autoconf 进行安装。 3.进入主函数所在目录执行命令:autoscan,这时会在目录下生成两个文件 autoscan.log和configure.scan,将configure.Scan改名为configure.ac,同时用gedit打开,打开后文件修改后的如下: # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ([2.69]) AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS]) AC_CONFIG_SRCDIR([main.c]) AC_CONFIG_HEADERS([config.h]) AM_INIT_AUTOMAKE(main,1.0) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(Makefile) 4.新建Makefile文件,如下: AUTOMAKE_OPTIONS=foreign bin_PROGRAMS=main first_SOURCES=main.c 5.运行命令aclocal 命令成功之后,在目录下会产生aclocal.m4和autom4te.cache两个文件。 6.运行命令autoheader 命令成功之后,会在目录下产生config.h.in这个新文件。 7.运行命令autoconf 命令成功之后,会在目录下产生configure这个新文件。 8.运行命令automake --add-missing输出结果为: Configure.ac:11:installing./compile’ Configure.ac:8:installing ‘.install-sh’ Configure.ac:8:installing ‘./missing’ Makefile.am:installing ‘./decomp’ 9. 命令成功之后,会在目录下产生depcomp,install-sh和missing这三个新文件和执行下一步的Makefile.in文件。 10.运行命令./configure就可以自动生成Makefile。 4.添加内核模块

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程

linux、内核源码、内核编译与配置、内核模块开发、内核启动流程(转) linux是如何组成的? 答:linux是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关CPU体系结构,各处理器可以有多种模式,而LInux这样的划分是考虑到系统的 安全性,比如X86可以有4种模式RING0~RING3 RING0特权模式给LINUX内核空间RING3给用户空间 linux内核是如何组成的? 答:linux内核由SCI(System Call Interface)系统调用接口、PM(Process Management)进程管理、MM(Memory Management)内存管理、Arch、 VFS(Virtual File Systerm)虚拟文件系统、NS(Network Stack)网络协议栈、DD(Device Drivers)设备驱动 linux 内核源代码 linux内核源代码是如何组成或目录结构? 答:arc目录存放一些与CPU体系结构相关的代码其中第个CPU子目录以分解boot,mm,kerner等子目录 block目录部分块设备驱动代码 crypto目录加密、压缩、CRC校验算法 documentation 内核文档 drivers 设备驱动 fs 存放各种文件系统的实现代码 include 内核所需要的头文件。与平台无关的头文件入在include/linux子目录下,与平台相关的头文件则放在相应的子目录中 init 内核初始化代码 ipc 进程间通信的实现代码 kernel Linux大多数关键的核心功能者是在这个目录实现(程序调度,进程控制,模块化) lib 库文件代码 mm 与平台无关的内存管理,与平台相关的放在相应的arch/CPU目录net 各种网络协议的实现代码,注意而不是驱动 samples 内核编程的范例 scripts 配置内核的脚本 security SElinux的模块 sound 音频设备的驱动程序 usr cpip命令实现程序 virt 内核虚拟机 内核配置与编译 一、清除 make clean 删除编译文件但保留配置文件

linux 内核编译编译选项

1.Code maturity level options 代码成熟等级。此处只有一项:prompt for development and/or incomplete code/drivers,如果你要试验现在仍处于实验阶段的功能,就必须把该项选择为Y了;否则可以把它选择为N。 2. Loadable module support 对模块的支持。这里面有三项: Enable loadable module support:除非你准备把所有需要的内容都编译到内核里面,否则该项应该是必选的。 Set version inFORMation on all module symbols:可以不选它。 Kernel module loader:让内核在启动时有自己装入必需模块的能力,建议选上。 3. Processor type and features CPU类型。有关的几个如下: Processor family:根据你自己的情况选择CPU类型。 High Memory Support:大容量内存的支持。可以支持到4G、64G,一般可以不选。 Math emulation:协处理器仿真。协处理器是在386时代的宠儿,现在早已不用了。 MTTR support:MTTR支持。可不选。 Symmetric multi-processing support:对称多处理支持。除非你富到有多个CPU,否则就不用选了。 4. General setup 这里是对最普通的一些属性进行设置。这部分内容非常多,一般使用缺省设置就可以了。下面介绍一下经常使用的一些选项: Networking support:网络支持。必须,没有网卡也建议你选上。 PCI support:PCI支持。如果使用了PCI的卡,当然必选。 PCI access mode:PCI存取模式。可供选择的有BIOS、Direct和Any,选Any 吧。 Support for hot-pluggabel devices:热插拔设备支持。支持的不是太好,可不选。 PCMCIA/CardBus support:PCMCIA/CardBus支持。有PCMCIA就必选了。System V IPC BSD Process Accounting Sysctl support:以上三项是有关进程处理/IPC调用的,主要就是System V 和BSD两种风格。如果你不是使用BSD,就按照缺省吧。 Power Management support:电源管理支持。 Advanced Power Management BIOS support:高级电源管理BIOS支持。

配置和编译Linux内核

配置和编译Linux内核 对内核进行正确配置后,才能进行编译。配置不当的内核,很有可能编译出错,或者不能正确运行。 1.1.1 快速配置内核 进入Linux内核源码数顶层目录,输入make menuconfig命令,可进入如图0.1所示的基于Ncurses的Linux内核配置主界面(注意:主机须安装ncurses相关库才能正确运行该命令并出现配置界面)。如果没有在Makefile中指定ARCH,则须在命令行中指定: $ make ARCH=arm menuconfig 图0.1基于Ncurses的Linux内核配置主界面 基于Ncurses的Linux内核配置界面不支持鼠标操作,必须用键盘操作。基本操作方法: ?通过键盘的方向键移动光标,选中的子菜单或者菜单项高亮; ?按TAB键实现光标在菜单区和功能区切换; ?子菜单或者选项高亮,将光标移功能区选中