A Swedish company called MySQL AB (www.mysql.com) is responsible for developing MySQL. MySQL has been released as an open-source product, gaining revenue by offering a variety of MySQL support packages, commercial licenses, and MySQL brand franchise products. Because MySQL is an open-source product, it has been ported to several different operating systems (primarily UNIX and Linux systems, although there are Windows versions and now even a Mac OS X version as well).
MySQL comes in both binary format and as an open-source. At the time of writing the current binary version available through Fedora repositories as an RPM package is version
When selecting between installation from the source code and using already built binary package consider the following
Under some circumstances, you may be better off installing MySQL from a source distribution:This lecture will concentrate on building MySQL server from the source code. To download the code and unpack it run the following commands:
- You want to install MySQL at some explicit location. The standard binary distributions are ready to run at any installation location, but you might require even more flexibility to place MySQL components where you want.
- You want to configure mysqld to ensure that features are available that might not be included in the standard binary distributions. Here is a list of the most common extra options that you may want to use to ensure feature availability:
- --with-berkeley-db (not available on all platforms)
- --with-libwrap
- --with-named-z-libs (this is done for some of the binaries)
- --with-debug[=full]
- You want to configure mysqld without some features that are included in the standard binary distributions. For example, distributions normally are compiled with support for all character sets. If you want a smaller MySQL server, you can recompile it with support for only the character sets you need.
- You have a special compiler (such as pgcc) or want to use compiler options that are better optimized for your processor. Binary distributions are compiled with options that should work on a variety of processors from the same processor family.
- You want to use the latest sources from one of the BitKeeper repositories to have access to all current bugfixes. For example, if you have found a bug and reported it to the MySQL development team, the bugfix is committed to the source repository and you can access it there. The bugfix does not appear in a release until a release actually is issued.
- You want to read (or modify) the C and C++ code that makes up MySQL. For this purpose, you should get a source distribution, because the source code is always the ultimate manual.
- Source distributions contain more tests and examples than binary distributions.
From INSTALL-SOURCE file.
# cd /usr/local/src # wget http://mysql.mirrors.hoobly.com/Downloads/MySQL-5.0/mysql-5.0.51a.tar.gz # tar xvfz mysql-5.0.51a.tar.gz # cd mysql-5.0.51a
Now, we are ready to build MySQL server with all the required libraries and start installation. Typically, when we build a program from its source code, we start from creating an appropriate Makefile by using the configure command. Here, we will start from the same thing, but first we will assign several low-level options for the gcc compiler:
# CFLAGS="-O3 -mpentiumpro" # CXX=gcc # CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti"Then, we can find out all possible options for the configure script by running
# ./configure --helpNow, we are ready to start the configure script:
# ./configure \ --enable-assembler \ --disable-shared \ --with-mysqld-ldflags="--all-static" \ --with-client-ldflags="--all-static" \ --prefix=/usr/local/mysql \ --localstatedir=/data/mysql \ --with-unix-socket-path=/tmp/mysql.sockLet's mentions some of the options we used:
# make # make install
After the package is installed, we need to make sure it successfully starts with all these options we used and do some basic configuration.
We start from creating a special mysql user under which privileges the MySQL server will work:
# groupadd mysql # useradd mysql -g mysql -M -s /sbin/nologinNow, we need to make sure that this user has access to all the directories needed:
# chgrp -R mysql /usr/local/mysql/bin # mkdir /data/mysql # chown -cR mysql /data/mysql
Once this is done, we can go to the MySQL configuration file /etc/my.cnf and change some settings. Please make sure that in the [mysqld] section instead of
datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sockyou have
datadir=/data/mysql socket=/tmp/mysql.sockbecause these are the directories we specified during the Makefile configuration. After this s done, we can create the initial version of the database files:
# /usr/local/mysql/bin/mysql_install_dbIf this program finished with no errors, we will work on automatic start up of the server.
MySQL package contains a start-up script called mysql.server which has to be copied into the usual start-up script location:
# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/ # cd /etc/init.d # chkconfig --add mysql.server # chkconfig --list mysql.server
Now, let's start the server and see if it actually works:
# service mysql.server startIf you see
Starting MySQL [ OK ]everything works fine and we can try to connect to the database. The client program that allows us to do this is called mysql and it is located in the /usr/local/mysql/bin directory (it's not a bad idea to append this directory name to the PATH environment variable). The initial databases installed by mysql_install_db have only two users: root and anonymous. We need to login as the root user to have right to change something inside the MySQL:
# /usr/local/mysql/bin/mysql -u root
mysql> use mysql;
Database changed
mysql> select user, host, password from user;
+------+-----------------------+----------+
| user | host | password |
+------+-----------------------+----------+
| root | localhost | |
| root | localhost.localdomain | |
| root | 127.0.0.1 | |
| | localhost | |
| | localhost.localdomain | |
+------+-----------------------+----------+
5 rows in set (0.00 sec)
mysql> update user set password=password('ist280-admin');
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
We just set the new passwords for all the users. Now, let's try to login as root using the new password:
# /usr/local/mysql/bin/mysql -u root mysql -p Enter password: mysql> quit Bye
If everything from the above worked with no errors, you are in great shape and we can add a GUI interface to your MySQL server. From the shell prompt run the following commands:
# yum install mysql-administrator # mysql-administrator &On the figure to your right, notice the port number to which MySQL server is listening for incoming connections.
If you are successfully logged on, you will see a window like this:
# mysql -u root mysql -p Enter password: mysql> grant select on test.* to daniel@'%' identified by 'daniel_password'; Query OK, 0 rows affected (0.0 sec) mysql> quit ByeNote the name of the user we are granting the privilege to daniel@'%'. If the first part of the name (before the @ symbol) is just the name, the second part indicates the hosts this user is allowed to connect to the server. In our case, the percent sign show that this user can connect to MySQL server from any computer.
Using this newly created account we can try to connect from the Windows host machine, but first we need to make sure that the port used by MySQL for connections is open in our Firewall settings. Please open the Firewall GUI

If you run mysqladmin command with the option variables
$ mysqladmin variables -u root -pyou will see a table like this:
+---------------------------------+----------------------------------------+ | Variable_name | Value | +---------------------------------+----------------------------------------+ | auto_increment_increment | 1 | | auto_increment_offset | 1 | | automatic_sp_privileges | ON | | back_log | 50 | | basedir | /usr/local/mysql/ | | binlog_cache_size | 32768 | | bulk_insert_buffer_size | 8388608 | | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | /usr/local/mysql/share/mysql/charsets/ | | collation_connection | latin1_swedish_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | | completion_type | 0 | | concurrent_insert | 1 | | connect_timeout | 5 | | datadir | /data/mysql/ | | date_format | %Y-%m-%d | | datetime_format | %Y-%m-%d %H:%i:%s | | default_week_format | 0 | | delay_key_write | ON | | delayed_insert_limit | 100 | | delayed_insert_timeout | 300 | | delayed_queue_size | 1000 | | div_precision_increment | 4 | | keep_files_on_create | OFF | | engine_condition_pushdown | OFF | | expire_logs_days | 0 | | flush | OFF | | flush_time | 0 | | ft_boolean_syntax | + -<>()~*:""&| | | ft_max_word_len | 84 | | ft_min_word_len | 4 | | ft_query_expansion_limit | 20 | | ft_stopword_file | (built-in) | | group_concat_max_len | 1024 | | have_archive | NO | | have_bdb | NO | | have_blackhole_engine | NO | | have_compress | YES | | have_crypt | YES | | have_csv | NO | | have_dynamic_loading | NO | | have_example_engine | NO | | have_federated_engine | NO | | have_geometry | YES | | have_innodb | YES | | have_isam | NO | | have_merge_engine | YES | | have_ndbcluster | NO | | have_openssl | NO | | have_ssl | NO | | have_query_cache | YES | | have_raid | NO | | have_rtree_keys | YES | | have_symlink | YES | | hostname | localhost.localdomain | | init_connect | | | init_file | | | init_slave | | | innodb_additional_mem_pool_size | 1048576 | | innodb_autoextend_increment | 8 | | innodb_buffer_pool_awe_mem_mb | 0 | | innodb_buffer_pool_size | 8388608 | | innodb_checksums | ON | | innodb_commit_concurrency | 0 | | innodb_concurrency_tickets | 500 | | innodb_data_file_path | ibdata1:10M:autoextend | | innodb_data_home_dir | | | innodb_doublewrite | ON | | innodb_fast_shutdown | 1 | | innodb_file_io_threads | 4 | | innodb_file_per_table | OFF | | innodb_flush_log_at_trx_commit | 1 | | innodb_flush_method | | | innodb_force_recovery | 0 | | innodb_lock_wait_timeout | 50 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_arch_dir | | | innodb_log_archive | OFF | | innodb_log_buffer_size | 1048576 | | innodb_log_file_size | 5242880 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ./ | | innodb_max_dirty_pages_pct | 90 | | innodb_max_purge_lag | 0 | | innodb_mirrored_log_groups | 1 | | innodb_open_files | 300 | | innodb_rollback_on_timeout | OFF | | innodb_support_xa | ON | | innodb_sync_spin_loops | 20 | | innodb_table_locks | ON | | innodb_thread_concurrency | 8 | | innodb_thread_sleep_delay | 10000 | | interactive_timeout | 28800 | | join_buffer_size | 131072 | | key_buffer_size | 8388600 | | key_cache_age_threshold | 300 | | key_cache_block_size | 1024 | | key_cache_division_limit | 100 | | language | /usr/local/mysql/share/mysql/english/ | | large_files_support | ON | | large_page_size | 0 | | large_pages | OFF | | lc_time_names | en_US | | license | GPL | | local_infile | ON | | locked_in_memory | OFF | | log | OFF | | log_bin | OFF | | log_bin_trust_function_creators | OFF | | log_error | | | log_queries_not_using_indexes | OFF | | log_slave_updates | OFF | | log_slow_queries | OFF | | log_warnings | 1 | | long_query_time | 10 | | low_priority_updates | OFF | | lower_case_file_system | OFF | | lower_case_table_names | 0 | | max_allowed_packet | 1048576 | | max_binlog_cache_size | 4294967295 | | max_binlog_size | 1073741824 | | max_connect_errors | 10 | | max_connections | 100 | | max_delayed_threads | 20 | | max_error_count | 64 | | max_heap_table_size | 16777216 | | max_insert_delayed_threads | 20 | | max_join_size | 4294967295 | | max_length_for_sort_data | 1024 | | max_prepared_stmt_count | 16382 | | max_relay_log_size | 0 | | max_seeks_for_key | 4294967295 | | max_sort_length | 1024 | | max_sp_recursion_depth | 0 | | max_tmp_tables | 32 | | max_user_connections | 0 | | max_write_lock_count | 4294967295 | | multi_range_count | 256 | | myisam_data_pointer_size | 6 | | myisam_max_sort_file_size | 2147483647 | | myisam_recover_options | OFF | | myisam_repair_threads | 1 | | myisam_sort_buffer_size | 8388608 | | myisam_stats_method | nulls_unequal | | net_buffer_length | 16384 | | net_read_timeout | 30 | | net_retry_count | 10 | | net_write_timeout | 60 | | new | OFF | | old_passwords | ON | | open_files_limit | 1024 | | optimizer_prune_level | 1 | | optimizer_search_depth | 62 | | pid_file | /data/mysql/localhost.localdomain.pid | | port | 3306 | | preload_buffer_size | 32768 | | profiling | OFF | | profiling_history_size | 15 | | protocol_version | 10 | | query_alloc_block_size | 8192 | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 0 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | | query_prealloc_size | 8192 | | range_alloc_block_size | 2048 | | read_buffer_size | 131072 | | read_only | OFF | | read_rnd_buffer_size | 262144 | | relay_log_purge | ON | | relay_log_space_limit | 0 | | rpl_recovery_rank | 0 | | secure_auth | OFF | | secure_file_priv | | | server_id | 0 | | skip_external_locking | ON | | skip_networking | OFF | | skip_show_database | OFF | | slave_compressed_protocol | OFF | | slave_load_tmpdir | /tmp/ | | slave_net_timeout | 3600 | | slave_skip_errors | OFF | | slave_transaction_retries | 10 | | slow_launch_time | 2 | | socket | /tmp/mysql.sock | | sort_buffer_size | 2097144 | | sql_big_selects | ON | | sql_mode | | | sql_notes | ON | | sql_warnings | OFF | | ssl_ca | | | ssl_capath | | | ssl_cert | | | ssl_cipher | | | ssl_key | | | storage_engine | MyISAM | | sync_binlog | 0 | | sync_frm | ON | | system_time_zone | EDT | | table_cache | 64 | | table_lock_wait_timeout | 50 | | table_type | MyISAM | | thread_cache_size | 0 | | thread_stack | 196608 | | time_format | %H:%i:%s | | time_zone | SYSTEM | | timed_mutexes | OFF | | tmp_table_size | 33554432 | | tmpdir | /tmp/ | | transaction_alloc_block_size | 8192 | | transaction_prealloc_size | 4096 | | tx_isolation | REPEATABLE-READ | | updatable_views_with_limit | YES | | version | 5.0.51a | | version_comment | Source distribution | | version_compile_machine | i686 | | version_compile_os | redhat-linux-gnu | | wait_timeout | 28800 | +---------------------------------+----------------------------------------+Some of these variables are: