- Take for example
10.0.159.22 - Using a calculator (!!!), convert each of the four numbers to hexadecimal (you get
0a.00.9f.16) - Then glue the four hexadecimal numbers together, after removing the dots, and, again with the calculator, convert them to decimal (
0a009f16HEX=167812886DEC) - Use this number (167812886) as your server ID in the options file.
Had the authors searched the MySQL manual for "IP address", they would have found the INET_ATON function, which can be used like this:
select inet_aton('10.0.159.22');
+--------------------------+
| inet_aton('10.0.159.22') |
+--------------------------+
| 167812886 |
+--------------------------+
Update.
Of course, if you want to ignore INET_ATON and avoid using a calculator, you can still leverage the server to do something like this:
delimiter //
drop function if exists redundant_inet_aton //
create function redundant_inet_aton(IP varchar(16))
returns bigint
deterministic
begin
return conv(
concat(
lpad(hex(substring_index(IP, '.', 1)+0),2,'0'),
lpad(hex(substring_index(
substring_index(IP, '.', 2),
'.', -1) +0 ),2,'0'),
lpad(hex(substring_index(
substring_index(IP, '.', 3),
'.', -1) +0 ),2,'0'),
lpad(hex(substring_index(IP, '.', -1) +0),2,'0')
),
16,10);
end //
#
# Probably good for an obfuscated code contest
#
delimiter ;
#
# testing the new function
#
select IP, redundant_inet_aton(IP), inet_aton(IP)
from (
SELECT '10.0.159.22' AS IP
UNION SELECT '192.168.2.6'
UNION SELECT '127.0.0.1'
UNION SELECT '10.176.1.15'
UNION SELECT '173.194.36.104'
) as t;
+----------------+-------------------------+---------------+
| IP | redundant_inet_aton(IP) | inet_aton(IP) |
+----------------+-------------------------+---------------+
| 10.0.159.22 | 167812886 | 167812886 |
| 192.168.2.6 | 3232236038 | 3232236038 |
| 127.0.0.1 | 2130706433 | 2130706433 |
| 10.176.1.15 | 179306767 | 179306767 |
| 173.194.36.104 | 2915181672 | 2915181672 |
+----------------+-------------------------+---------------+
