Project

General

Profile

Database Server Installation Shared » History » Version 34

Neil Voss, 05/12/2010 11:54 AM

1 1 Amber Herold
h1. Database Server Installation
2
3
h2. Install MySQL 
4
5
The following is for the computer that hosts the databases. This involves installing MySQL server and creation/configuration of the leginondb and projectdb databases.
6
7 16 Neil Voss
*Note:* You may already have MySQL Server and Client installed. Check by typing mysql at the command line. 
8
If you see a MySQL prompt (mysql>), skip to step 2
9 1 Amber Herold
 
10 15 Neil Voss
h3. Install MySQL-Server and MySQL-Client
11 1 Amber Herold
12 15 Neil Voss
To install Mysql on Linux you have two options (the first option is better):
13 1 Amber Herold
14 15 Neil Voss
# Use your package installer (yum, zypper, YaST, apt-get). For example:
15
<pre>sudo yum install mysql mysql-server</pre>
16
# Download the latest MySQL-server package for Linux from http://www.mysql.com
17 1 Amber Herold
18 15 Neil Voss
h3. Example MySQL configuration files are usually located in /usr/share/mysql.
19 1 Amber Herold
20
<pre>
21
ls /usr/share/mysql/my*
22 15 Neil Voss
    /usr/share/mysql/my-huge.cnf
23
    /usr/share/mysql/my-innodb-heavy-4G.cnf
24
    /usr/share/mysql/my-large.cnf
25
    /usr/share/mysql/my-medium.cnf
26
    /usr/share/mysql/my-small.cnf
27 20 Neil Voss
</pre>
28
If that does not work try the locate function
29
<pre>
30 15 Neil Voss
locate my | egrep "\.cnf$"
31
    /etc/my.cnf
32 1 Amber Herold
    /usr/share/mysql/my-huge.cnf
33
    /usr/share/mysql/my-innodb-heavy-4G.cnf
34
    /usr/share/mysql/my-large.cnf
35
    /usr/share/mysql/my-medium.cnf
36
    /usr/share/mysql/my-small.cnf
37 3 Amber Herold
</pre>
38 1 Amber Herold
39 15 Neil Voss
h3. Configure my.cnf in /etc using my-huge.cnf as the template
40 1 Amber Herold
41 18 Neil Voss
# Copy my-huge.cnf to my.cnf
42 19 Neil Voss
<pre>sudo cp -v /usr/share/mysql/my-huge.cnf /etc/my.cnf</pre>
43 22 Neil Voss
# Edit /etc/my.cnf to add or change query cache variables like these (be sure to place them under the @[mysqld]@ section):
44 1 Amber Herold
<pre>
45 11 Neil Voss
query_cache_type= 1
46 1 Amber Herold
query_cache_size = 100M
47
query_cache_limit= 100M
48 21 Neil Voss
</pre>
49 11 Neil Voss
# Search for the text default-storage-engine in /etc/my.cnf.  If it exists and is set to other than MyISAM, you should change it to:
50 1 Amber Herold
<pre>default-storage-engine=MyISAM</pre>
51 10 Neil Voss
52 22 Neil Voss
h3. Start the MySQL Server
53 1 Amber Herold
54 10 Neil Voss
For CentOS/Fedora/RHEL system use the service command:
55
56 1 Amber Herold
<pre>
57 10 Neil Voss
sudo /sbin/service mysqld start
58 1 Amber Herold
</pre>
59
60 10 Neil Voss
For other Unix systems:
61
62
<pre>
63
sudo /etc/init.d/mysqld start
64
</pre>
65
66 12 Neil Voss
or on some installations,
67 1 Amber Herold
68
<pre>
69 10 Neil Voss
sudo /etc/init.d/mysql start
70 1 Amber Herold
</pre>
71
72
For future reference: start | stop | restart MySQL Server with similar commands:
73
74
<pre>
75 10 Neil Voss
sudo /etc/init.d/mysqld start
76
sudo /etc/init.d/mysqld stop
77
sudo /etc/init.d/mysqld restart
78
sudo /sbin/service mysqld start
79
sudo /sbin/service mysqld stop
80
sudo /sbin/service mysqld restart
81 1 Amber Herold
</pre>
82
83 12 Neil Voss
If you want to start MySQL automatically at boot
84 1 Amber Herold
85
<pre>
86 23 Neil Voss
sudo /sbin/chkconfig mysql on
87 1 Amber Herold
</pre>
88 23 Neil Voss
or for SuSe:
89
<pre>
90
sudo /sbin/chkconfig mysql on
91
</pre>
92 1 Amber Herold
93
h3. 6. For future reference, the database location will be:
94
95 10 Neil Voss
<pre>
96
ls /var/lib/mysql
97 11 Neil Voss
    ibdata1  ib_logfile0  ib_logfile1  mysql  mysql.sock  test
98 1 Amber Herold
</pre>
99
100
h3. 7. Create the Leginon database, call it leginondb
101 3 Amber Herold
102 1 Amber Herold
<pre>
103 10 Neil Voss
sudo mysqladmin create leginondb
104 1 Amber Herold
</pre>
105
106
h3. 8. Create the Project database, call it projectdb
107
108
<pre>
109
sudo mysqladmin create projectdb
110
</pre>
111
112 11 Neil Voss
h3. 9. Connect to mysql db
113
114 28 Neil Voss
If starting from scratch the mysql root user will have no password. This is assumed to be the case and we will set it later.
115 1 Amber Herold
116 23 Neil Voss
<pre>
117 28 Neil Voss
mysql -u root mysql
118 23 Neil Voss
</pre>
119 1 Amber Herold
120 11 Neil Voss
<pre>
121
mysql> select user, password, host from user;
122 1 Amber Herold
      +------+----------+-----------+
123
      | user | password | host      |
124
      +------+----------+-----------+
125
      | root |          | localhost |
126
      | root |          | host1     |
127
      |      |          | host1     |
128
      |      |          | localhost |
129
      +------+----------+-----------+
130
      4 rows in set (0.00 sec)
131
</pre>
132
133
h3. 10. Create user
134
135 29 Neil Voss
Create and grant privileges to a user called usr_object for the databases on both the localhost and other hosts involved. For example, use wild card '%' for all hosts. You can set specific (@ALTER, CREATE, DROP, DELETE, INSERT, RENAME, SELECT, UPDATE@) privileges or @ALL@ privileges to the user. See MySQL Reference Manual for details.
136 3 Amber Herold
137 1 Amber Herold
<pre>
138 24 Neil Voss
mysql> CREATE USER usr_object@'localhost' IDENTIFIED BY 'PASSWORD';
139 27 Neil Voss
mysql> GRANT ALTER, CREATE, INSERT, SELECT, UPDATE ON leginondb.* TO usr_object@'localhost';
140
mysql> GRANT ALTER, CREATE, INSERT, SELECT, UPDATE ON projectdb.* TO usr_object@'localhost';
141 1 Amber Herold
</pre>
142
143 25 Neil Voss
less secure version (no password and all privileges), we recommend not allowing the DROP and DELETE privileges.
144 1 Amber Herold
145
<pre>
146 24 Neil Voss
mysql> CREATE USER usr_object@'localhost';
147
mysql> GRANT ALL PRIVILEGES ON leginondb.* TO usr_object@'localhost';
148
mysql> GRANT ALL PRIVILEGES ON projectdb.* TO usr_object@'localhost';
149 1 Amber Herold
</pre>
150
151 24 Neil Voss
Similarly, you can assign a domain
152
153
<pre>
154 26 Neil Voss
mysql> CREATE USER usr_object@'%' IDENTIFIED BY 'PASSWORD';
155 27 Neil Voss
mysql> GRANT ALTER, CREATE, INSERT, SELECT, UPDATE ON leginondb.* to usr_object@<host.mydomain.edu>;
156
mysql> GRANT ALTER, CREATE, INSERT, SELECT, UPDATE ON projectdb.* to usr_object@<host.mydomain.edu>;
157 24 Neil Voss
</pre>
158
159 3 Amber Herold
Next, give create and access privileges for the processing databases which begin with "ap".
160 1 Amber Herold
161 10 Neil Voss
<pre>
162 24 Neil Voss
# if your web host is local
163 27 Neil Voss
mysql> GRANT ALTER, CREATE, INSERT, SELECT, UPDATE ON `ap%`.* to usr_object@localhost; 
164 24 Neil Voss
# for all other hosts if you are accessing the databases from another computer
165 27 Neil Voss
mysql> GRANT ALTER, CREATE, INSERT, SELECT, UPDATE ON `ap%`.* to usr_object@<host.mydomain.edu>;       
166 1 Amber Herold
</pre>
167
168
h3. 11. Change Root password
169
170 28 Neil Voss
To set the root password use the command: 
171
172 1 Amber Herold
<pre>
173 28 Neil Voss
sudo mysqladmin -u root password NEWPASSWORD
174
</pre>
175 1 Amber Herold
176 28 Neil Voss
Or you can do it from within mysql
177
<pre>
178 10 Neil Voss
mysql> update user set password=password('your_own_root_password') where user="root";
179
Query OK, 2 rows affected (0.01 sec)
180
Rows matched: 2  Changed: 2  Warnings: 0
181
182
mysql> flush privileges;
183 12 Neil Voss
mysql>^D or exit;
184 10 Neil Voss
</pre>
185 3 Amber Herold
186 1 Amber Herold
187 3 Amber Herold
From now on, you will need to specify the password to connect to the database as root user like this:
188 1 Amber Herold
189
<pre>
190 30 Neil Voss
>mysql -u root -p mysql
191 1 Amber Herold
</pre>
192
193
h3. 12. Check MySQL variables
194
195
<pre>
196 31 Neil Voss
>mysql -u usr_object -p leginondb
197 1 Amber Herold
198 30 Neil Voss
mysql> SHOW VARIABLES LIKE 'query%';
199 1 Amber Herold
      +------------------------------+-----------+
200
      | Variable_name                | Value     |
201
      +------------------------------+-----------+
202
      | ft_query_expansion_limit     | 20        |
203
      | have_query_cache             | YES       |
204
      | long_query_time              | 10        |
205
      | query_alloc_block_size       | 8192      |
206
      | query_cache_limit            | 104857600 | <<---This should correspond to your change
207
      | query_cache_min_res_unit     | 4096      |
208
      | query_cache_size             | 104857600 | <<---This should correspond to your change
209
      | query_cache_type             | ON        | <<---This should correspond to your change
210
      | query_cache_wlock_invalidate | OFF       |
211
      | query_prealloc_size          | 8192      |
212
      +------------------------------+-----------+
213
      10 rows in set (0.00 sec)
214
215 30 Neil Voss
mysql> exit;
216 1 Amber Herold
</pre>
217
218 30 Neil Voss
h3. Make sure MySQL is running
219 1 Amber Herold
220
<pre>
221 30 Neil Voss
> mysqlshow
222 1 Amber Herold
      +--------------+
223
      | Databases    |
224
      +--------------+
225
      | mysql        |
226
      | leginondb    |
227
      | projectdb    |
228
      +--------------+
229 3 Amber Herold
</pre>
230 1 Amber Herold
231 30 Neil Voss
h3. Or check with the following php script (if already installed)
232 1 Amber Herold
233
<pre>
234 30 Neil Voss
<?
235
  mysql_connect('HOST.INSTITUTE.EDU', 'usr_object', 'PASSWORD','leginondb');
236
  echo mysql_stat();
237
?> 
238 1 Amber Herold
</pre>
239
240 30 Neil Voss
From the command line:
241 1 Amber Herold
242
<pre>
243 30 Neil Voss
php -r "mysql_connect('localhost', 'usr_object', 'PASSWORD', 'leginondb'); echo mysql_stat();"; echo ""
244 1 Amber Herold
</pre>
245
246 30 Neil Voss
Expected output:
247 1 Amber Herold
248
<pre>
249 30 Neil Voss
Uptime: 1452562 Threads: 1 Questions: 618 Slow queries: 0 Opens: 117 Flush tables: 1 Open tables: 106 Queries per second avg: 0.000
250
</pre>
251 1 Amber Herold
252 30 Neil Voss
If see any error messages, the above part may be configured correctly.
253 1 Amber Herold
254 30 Neil Voss
h2. Configure phpMyAdmin 
255 1 Amber Herold
256 30 Neil Voss
Edit the phpMyAdmin config file @/etc/phpMyAdmin/config.inc.php@ and change the following lines:
257 1 Amber Herold
258 12 Neil Voss
<pre>
259 30 Neil Voss
$cfg['Servers'][$i]['AllowRoot']     = FALSE;
260 1 Amber Herold
</pre>
261
262 30 Neil Voss
Edit the phpMyAdmin apache config file @/etc/httpd/conf.d/phpMyAdmin.conf@ and change the following lines:
263 1 Amber Herold
264
<pre>
265
<Directory /usr/share/phpMyAdmin/>
266
   order deny,allow
267
   deny from all
268
   allow from 127.0.0.1
269
   allow from YOUR_IP_ADDRESS
270
</Directory>
271
</pre>
272 31 Neil Voss
273
*Note:* If you want to access phpMyAdmin from another computer, you can also add it to this config file with an @allow from@ tag
274 1 Amber Herold
275 33 Neil Voss
Next restart the web server to take on the new setting
276
<pre>
277
sudo /sbin/service httpd restart
278
</pre>
279
280 34 Neil Voss
!phpMyAdmin.png!
281
282 33 Neil Voss
To test the phpMyAdmin configuration, point your browser to http://YOUR_IP_ADDRESS/phpMyAdmin or http://localhost/phpMyAdmin and login with the usr_object user.
283
284
A common problem is that the firewall may be blocking access to the web server and mysql server. On CentOS/Fedora you can configure this with the system config:
285
286
<pre>
287
system-config-securitylevel
288
</pre>
289
290
Firewall configuration is specific to different Unix distributions, so consult a guide on how to do this on non-RedHat machines.