开发人员学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: Gdl
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: Gdl
2017-06-09T13:46:48.721250Z 1 [Note] A temporary password is generated for root@localhost: Z>B#5IfIFAfj
其中Gdl
登录成功后,如果再执行其它语句时会得到如下提示:
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 内核修改与编译图文教程 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 内核让很多用户打心里有所畏惧。在那个时候,升级内核包含了很多步骤,也需要很多时间。现在,内核的安装可以轻易地通过像 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 内核,另一种是内核增量补丁,它们都是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操作系统 【实验目的】 了解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系统内核的配置、编译和烧写 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”到当前路径下:
操作系统实验报告 姓名:学号: 一、实验题目 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是由用户空间和内核空间组成的 为什么要划分用户空间和内核空间? 答:有关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 删除编译文件但保留配置文件
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内核 对内核进行正确配置后,才能进行编译。配置不当的内核,很有可能编译出错,或者不能正确运行。 1.1.1 快速配置内核 进入Linux内核源码数顶层目录,输入make menuconfig命令,可进入如图0.1所示的基于Ncurses的Linux内核配置主界面(注意:主机须安装ncurses相关库才能正确运行该命令并出现配置界面)。如果没有在Makefile中指定ARCH,则须在命令行中指定: $ make ARCH=arm menuconfig 图0.1基于Ncurses的Linux内核配置主界面 基于Ncurses的Linux内核配置界面不支持鼠标操作,必须用键盘操作。基本操作方法: ?通过键盘的方向键移动光标,选中的子菜单或者菜单项高亮; ?按TAB键实现光标在菜单区和功能区切换; ?子菜单或者选项高亮,将光标移功能区选中
配置完毕,将光标移动到配置界面末尾,选中“Save an Alternate Configuration File”后回车,保存当前内核配置,默认配置文件名为.config,如图0.2所示。 图0.2保存内核配置为.config文件 保存完毕,选择
《Linux系统管理与维护》实验指导书 实验一初识Linux操作系统 一实验名称 初识Linux操作系统 二实验目的与要求 掌握Linux的启动、登录与注销。 三实验内容 1.以root用户和普通用户两种不同身份登录Linux,说出其登录后得差异。 2.图形模式下的注销、重启与关机。 3.学会在虚拟机上登录和注销Linux。 四操作步骤与结果分析 五问题与建议
实验二Linux的桌面应用 一实验名称 Linux的桌面应用 二实验目的与要求 熟悉Linux操作系统桌面环境 熟悉Linux文件系统及常用的操作 掌握Linux下使用外部存储设备、网络设备 掌握Linux下安装应用程序 三实验内容 1.查看GNOME提供的“应用程序”、“位置”或者“系统”菜单,运行其中的应用程 序和工具。 2.查看Linux文件目录结构,学会常用的文件目录操作,如复制、粘贴、移动、删 除、更名、创建文档、创建文件夹等。 3.练习在Linux下使用光盘和U盘。 4.学会网络配置,使计算机能够进行网络浏览等操作。 5.学会在Linux下安装新的应用软件。 四操作步骤与结果分析 五问题与建议
实验三Linux操作系统的安装 一实验名称 Linux操作系统的安装 二实验目的与要求 掌握安装Linux操作系统 三实验内容 1.通过学习《项目五Linux操作系统的安装及远程服务》的内容,学会如何安装Linux。 环境:windows 系统、vmware虚拟机、Redhat Linux镜像光盘。 通过安装向导将安装分为两步:1、基本安装,2、配置及具体安装。 在第一阶段重点如何分区,在第二阶段重点掌握如何设置密码及安装桌面环境。四操作步骤与结果分析 五问题与建议
湖北大学 学生实验报告 实验课程网络实用技术 开课学院计算机与信息工程学院 任课教师徐婕 学生姓名骆婧 学生学号20112211042100 70 专业班级计科一班 学生年级2011级 2013-2014 学年第二学期
一.实验目的 通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法;掌握用户程序如何利用系统调用与操作系统内核实现通信的方法,加深对系统调用机制的理解;进一步掌握如何向操作系统内核增加新的系统调用的方法,以扩展操作系统的功能。 二.实验内容 1.Linux环境下的C或者C++编译和调试工具的使用 2.向Linux内核增加新的系统调用,系统调用的功能为打印出自己的学号和 姓名信息。 3.Linux新内核的编译、安装和配置。 4.编写应用程序以测试新的系统调用并输出测试结果。 三、实验步骤 第一步:解压文件 1.下载linux-3.13.3.tar.xz压缩包。 2.在Ubantu系统下,解压该文件,解压之后得到linux- 3.13.3文件包 # tar –xf linux-3.13.3.tar.xz 3.将解压后的文件包复制到/usr/src # cp linux3.13.3 /usr/src 第二步:修改源程序,增加系统调用 1.gedit /usr/src/linux-3-13.3/kernel/sys.c (增加系统调用,使用面向内核的 打印函数printk打印姓名学号) 使用gedit命令,可以直接在文档编辑器中直接修改。修改好后按保存关闭文档编辑器。 在开头加入头文件: #include
Computer Knowledge and Technology 电脑知识 与技术第5卷第3期(2009年1月)Linux 内核的配置与编译 胡庆烈 (佛山职业技术学院电子信息工程系,广东佛山528000) 摘要:Linux 是一种实用性很强的现代操作系统,它开放源代码,并允许用户升级其内核。在Redhat 7.2环境中,详细分析了Linux 2.4.18版本的内核配置、编译及新内核切换等操作过程。 关键词:Linux ;内核;配置;编译 中图分类号:TP316文献标识码:A 文章编号:1009-3044(2009)03-0730-02 Configuration and Compiling of Linux Kernel HU Qing-lie (Department of Electonics &Information,Foshan Polytechnic College,Foshan 528000,China) Abstract:Linux is a very practical modern operating system,which opens source coding and allows the user to upgrade its kernel.In the environment of Redhat 7.2,the paper analysis the Linux 2.4.18version of kernel configuration,compiling and new kernel process switch -ing,and so on. Key words:Linux;kernel;configuration;compile 1引言 Linux 是一个自由的多任务操作系统,它以开放源码、对硬件的配置要求低并兼具现代操作系统的优点而得到了迅猛的发展。操作系统的内核是操作系统的核心,它有很多基本的功能,如虚拟内存、多任务、共享库、需求加载、共享的写时拷贝(copy-on-write)、可执行程序和TCP/IP 网络功能等。 用户编译配置Linux 的内核,主要有以下三个原因:1)从现有内核中去除一些不需要的功能,使自定制的内核运行速度更快、更稳定,且具有更少的代码;2)使系统拥有更多的内存,内核部分将不会被交换到虚拟内存中;3)为了提高速度,将某种功能编译到内核中。 2Linux 内核升级的准备 2.1安装一个Linux 操作系统 在编译一个新的Linux 内核之前,首先应在微机中安装一个Linux 操作系统,以便利用该Linux 环境进行新内核的配置和安装。这里是以Redhat 7.2为例,在安装Redhat 7.2的过程中,有两个问题需要注意: 1)硬盘的分区:由于每个硬盘只能拥有4个主分区(Primary Partition ),故用户需要扩展分区,则至少需要腾出一个主分区来划分逻辑分区。在安装Linux 操作系统时,至少需要两个分区,其中本机分区(Linux Native )是供Linux 存放系统文件,而置换分区(Linux Swap )是用作虚拟内存的存取空间。此外,为了和Windows 系统进行文件的复制转换,还应创建一个FAT32类型的分区。 2)安装LILO 启动程序:LILO 是Linux 的核心加载程序,它提供了从DOS 环境启动Linux 的功能,并支持多重启动菜单,让用户选择启动哪一个分区的操作系统。 2.2获取新的Linux 内核源代码 安装了Linux 操作系统后,接下来的工作是寻找新内核的源代码。目前,在Internet 上提供Linux 源代码的站点有很多,如https://www.doczj.com/doc/7c8344189.html, 就是Linux 内核版本发布的官方网站,用户可以从该站点上获得最新版本的Linux 内核源代码,这里是以linux- 2.4.18版本为例。 2.3对新的Linux 内核源代码包进行解压 由于大部分开放性操作系统的程序都是以压缩文件(tgz 、zip 、gz 与bz2)的形式进行发布,所以从网络上取得这些压缩文件后,都先要解压缩之后才能安装使用。具体过程如下: 1)执行“GNOME Terminal ”,把X Windows System 图形用户界面切换至文件操作模式; 2)执行“#cp /root/linux-2.4.18.tar.gz /usr/src ”,把从网络下载的压缩包复制至/usr/src 处; 3)执行“#tar -zxvf linux-2.4.18.tar.gz ”,对压缩包进行解压,解压文件存放在/usr/src/linux-2.4.18目录中。 2.4清除不正确文件及其它从属文件 为了确保源代码目录中没有不正确的文件和其它从属文件,一般需要运行mrproper 命令进行清理,具体操作如下: #cd /usr/src/linux-2.4.18 #make mrproper 如果是使用刚下载的完整的源程序包进行编译,则可以省略mrproper 操作。但若已反复多次使用这些源程序来进行内核编译的,则应要先运行一下这个命令。 收稿日期:2008-12-11 作者简介:胡庆烈(1969-),男,揭阳惠来人,电子助理工程师,主要从事电子技术的教研工作。 ISSN 1009-3044Computer Knowledge and Technology 电脑知识与技术Vol.5,No.3,January 2009,pp.730-731,735E-mail:kfyj@https://www.doczj.com/doc/7c8344189.html, https://www.doczj.com/doc/7c8344189.html, Tel:+86-551-56909635690964
Linux内核配置编译与文件系统构建 南京大学 黄开成101180046 2012.11.11 一:实验目的 1.了解嵌入式系统的开发环境,内核与文件系统的下载和启动; 2.了解Linux内核源代码的目录结构及各自目录的相关内容,了解Linux内核各配置选项内容和作用,掌握Linux内核的编译过程; 3.了解嵌入式操作系统中文件系统的类型和应用、了解JFFS2文件系统的优点及其在嵌入式系统中的作用、掌握利用Busybox软件制作嵌入式文件系统的方法,并且掌握嵌入式Linux文件系统的挂载过程。二:实验环境说明 1.PC机使用openSUSE 14 Enterprise 系统。 2.开发板使用深圳市武耀博德信息技术有限公司生产的基于Inter 的PXA270处理器的多功能嵌入式开发平台EELIOD。 3.PC机通过RS-232串口与开发板相连,在PC机终端上运行minicom 程序构造一个开发板上的终端,用于对开发板的控制。 4.PC机与开发板通过ethernet网络相连接,并可在开发板上通过加载网络文件系统(NFS)与PC机通信。 5.Bootloader可以通过tftp协议从PC机上下载内核镜像和根文件系统镜像。下载目录为/tftpboot 。 6.用于开发板的Linux内核源码为linux-2.4.21-51Board_EDR,
busybox版本为busybox-1.00-pre5。 7.交叉编译器的路径为/usr/local/arm-linux/bin/arm-linux。 三:实验操作过程和分析记录 1.嵌入式系统的开发环境和开发流程: 1.1启动minicom和开发板 在PC机上打开一个终端,输入: >minicom 按Ctrl+A-o进入minicom的configuration界面。对串行通信接口进行配置,串口设置为:/dev/ttyS0(串口线接在PC机的串口1上)、bps=115200、8位数据、无校验、无流控制。 然后打开开发板电源,看到屏幕有反应之后,按任意键进入配置界面,如果长时间没有按下任何键,bootloader将会自动从flash中读取内核和根文件系统并启动开发板上的Linux系统。 分析:嵌入式系统中,通常并没有像PC机中BIOS 那样的固件程序,因此整个系统的加载启动任务完全由bootloader来完成。bootloader的主要作用是:初始化硬件设备;建立内存空间的映射图;完成内核的加载,为内核设置启动参数。 按0进入命令行模式,出现51board>,可以设置开发板和PC机的IP 地址: 51board> set myipaddr 192.168.208.133(设置开发板的IP地址) 51board> set destipaddr 192.168.208.33(设置PC机的IP地址)注意IP地址的设置:使其处于同一网段,并且避免和其他系统的
在ubuntu12.04下编译linux内核 写这个东西的时候, 想起07年第一次编译内核, 想起06年开始看内核代码, 想起那段,生命中最灰暗的日子。 那时, 经常在校内写读内核的心得, 只因发现, 你 目录 前言 (2) 一、编译前的准备工作 (2) 二、内核的配置 (2) 三、内核的生成和安装 (3) 四、启动新内核 (4) 五、修改默认的配置文件 (4) 5.1修改默认配置添加软件功能 (4) 5.2修改默认配置添加pci和usb设备驱动 (5) 5.3修改默认配置添加杂类设备驱动 (7)
前言 编译内核和编译其它软件相比,除了配置之外,没有什么特别的地方。既然编译内核这么简单,网上也能找到很多介绍的文章,我为什么还要写呢? 因为看到有些文章源自不断抄袭旧东西,导致抄了些没用的东西,而且基本都对内核配置避而不谈,这样实际上一定会有人遇到问题。 所以,写点吧,给初学者。 一、编译前的准备工作 编译软件需要先安装编译环境,主要的就是工具链(toolchain)。由于安装包需要下载的数据量较大,所以如果软件源建议还是换成国内的吧。 我用163的源,source.list文件在这里,覆盖/etc/apt/source.list就行了。 替换源后,执行如下命令: apt-get update apt-get install build-essential p7zip-full 后面的7z工具供下载了xz后缀文件的同学使用。 下载内核源码的网站是https://www.doczj.com/doc/7c8344189.html,,版本随意,源码包名字是linux-3.x.x.tar.gz, 有很多版本提供.xz结尾的压缩版本,压缩比较高,看自己网络情况定吧。我这里下载的版本是3.6.6,名为linux-3.6.6.tar.gz。 接着解压源码,假设我们的编译目录为/home/sb/,解压命令为: tar xf linux-3.6.6.tar.gz-C/home/sb 这样/home/sb/下出现一个linux-3.6.6的目录。 二、内核的配置 内核支持很多的设备和功能,这些设备驱动和功能的开关主要通过内核的配置文件确定。编译时,内核使用的配置文件是内核源码树根目录下一个名为.config的隐藏文件。 x86电脑默认内核配置文件可直接使用arch/x86/config/i386_defconfig,如下命令:cp arch/x86/config/i386_defconfig.config make menuconfig 默认的配置文件对于启动系统足够了,但是不同的机器硬件配置不同,默认的配置可能不支持你机器的部分硬件,火鹤缺少一些你需要的功能。所以实际上,你会需要修改默认配置文件,重新编译来达到你的需求,关于配置文件修改见后续“修改默认的配置文件”一章。 make menuconfig后有个蓝白界面弹出来,就是内核的配置界面,如下:
实验指导书1-vmware与redhat-linux-7.3安装
实验一、Vmware虚拟机与Redhat linux 7.3安装 【实验目的】 1、了解和熟悉Vmware的使用方法 2、熟悉Redhat linux7.3的安装过程 3、安装vmware tools,安装显卡驱动 4、实现vmware和linux的共享目录。 5、实现telnet远程访问 【实验准备】 1、vmware 4.5.2虚拟机软件 2、redhat linux 7.3三个ISO映像文件 valhalla-i386-disc1.ISO valhalla-i386-disc2.ISO valhalla-i386-disc3.ISO 【实验内容】 1、在Vmware虚拟机中安装redhat linux 7.3操作系统 步骤:(1)在主机的D盘或者E盘建立redhat linux 7.3的目录 (2)启动vmware 虚拟机软件,按照课件上方法新建一个操作系统 (1) (2) (3) (4)
(5) (6) (7) (8) 步骤3:启动虚拟机,准备安装redhat linux 7.3,我们使用光盘镜像来安装Linux,点击菜单[VM]-[settings],在[hardware]-[CD Rom] 中选择 [ISO image],点击“浏览”选择ISO 文件valhalla-i386-disc1.iso
步骤4.启动vmware,安装redhat linux 7.3,在boot:后输入text 回车。 提示:在安装界面上采用图形方式装,如果采用图形方式安装,在安装到840M时,会提示出错。可以退出,再次重新安装基本第二次都会成功。
[原创]linux2.6内核的编译步骤及模块的动态加载-内核源码 学习-linux论坛 05年本科毕业设计做的是Linux下驱动的剖析,当时就买了一本《Linux设备驱动程序(第二版)》,但是没有实现将最简单的helloworld程 序编译成模块,加载到kernel里。不过,现在自己确实打算做一款芯片的Linux的驱动,因此,又开始看了《Linux设备驱动程序》这本书,不过已 经是第三版了。第二版讲的是2.4的内核,第三版讲的是2.6的内核。两个内核版本之间关于编译内核以及加载模块的方法都有所变化。本文是基于2.6的内核,也建议各位可以先看一下《Linux内核设计与实现(第二版)》作为一个基础知识的铺垫。当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块。个人用的Linux版本为:Debian GNU/Linux,内核版本为:2.6.20-1-686.第一步,下载Linux内核的源代码,即构建LDD3(Linux Device Drivers 3rd)上面所说的内核树。 如过安装的Linux系统中已经自带了源代码的话,应该在/usr/src目录下。如果该目录为空的话,则需要自己手动下载源代码。下载代码的方法和链接很多,也可以在CU上通过
https://www.doczj.com/doc/7c8344189.html,/search/?key=&;q=kernel&a mp;frmid=53去下载。不过,下载的内核版本最好和所运行的Linux系统的内核版本一致。当然,也可以比Linux系统内核的版本低,但高的话应该不行(个人尚未实践)。 Debian下可以很方便的通过Debian源下载: 首先查找一下可下载的内核源代码: # apt-cache search linux-source 其中显示的有:linux-source-2.6.20,没有和我的内核版本完全匹配,不过也没关系,直接下载就可以了: # apt-get install linux-source-2.6.20 下载完成后,安装在/usr/src下,文件名为: linux-source-2.6.20.tar.bz2,是一个压缩包,解压缩既可以得到整个内核的源代码: # tar jxvf linux-source-2.6.20.tar.bz2
内核,是一个操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。Linux作为一个自由软件,在广大爱好者的支持下,内核版本不断更新。新的内核修订了旧内核的bug,并增加了许多新的特性。如果用户想要使用这些新特性,或想根据自己的系统度身定制一个更高效,更稳定的内核,就需要重新编译内核。本文将以RedHat Linux 6.0(kernel 2.2.5)为操作系统平台,介绍在Linux上进行内核编译的方法。 一、下载新内核的源代码 目前,在Internet上提供Linux源代码的站点有很多,读者可以选择一个速度较快的站点下载。笔者是从站点https://www.doczj.com/doc/7c8344189.html,上下载了Linux的最新开发版内核2.3.14的源代码,全部代码被压缩到一个名叫Linux-2.3.14.tar.gz的文件中。 二、释放内核源代码 由于源代码放在一个压缩文件中,因此在配置内核之前,要先将源代码释放到指定的目录下。首先以root帐号登录,然后进入/usr/src子目录。如果用户在安装Linux时,安装了内核的源代码,则会发现一个linux-2.2.5的子目录。该目录下存放着内核2.2.5的源代码。此外,还会发现一个指向该目录的链接linux。删除该连接,然后将新内核的源文件拷贝到/usr/src目录中。 (一)、用tar命令释放内核源代码 # cd /usr/src # tar zxvf Linux-2.3.14.tar.gz 文件释放成功后,在/usr/src目录下会生成一个linux子目录。其中包含了内核2.3.14的全部源代码。 (二)、将/usr/include/asm、/usr/inlude/linux、/usr/include/scsi链接到 /usr/src/linux/include目录下的对应目录中。 # cd /usr/include # rm -Rf asm linux # ln -s /usr/src/linux/include/asm-i386 asm # ln -s /usr/src/linux/include/linux linux # ln -s /usr/src/linux/include/scsi scsi (三)、删除源代码目录中残留的.o文件和其它从属文件。